PermitOnly 메서드 사용
PermitOnly를 호출하는 것은 Deny를 호출하는 것과 본질적으로 동일하지만, 보안 검사에서 실패하는 조건을 지정하는 방법이 다릅니다. Deny처럼 지정된 리소스에 액세스할 수 없다고 하지 않고, PermitOnly는 지정하는 리소스에만 액세스할 수 있다고 합니다. 따라서 권한 X에서 PermitOnly를 호출하는 것은 권한 X를 제외한 모든 권한에서 Deny를 호출하는 것과 마찬가지입니다. PermitOnly를 호출하면 코드는 PermitOnly를 호출할 때 지정한 권한으로 보호된 리소스에만 액세스할 수 있습니다. 액세스할 수 없는 리소스 대신 액세스할 수 있는 리소스를 지정하는 것이 더 편리할 경우 Deny 대신 PermitOnly를 사용합니다.
참고 |
---|
.NET Framework 버전 4에서 런타임 지원은 Deny, RequestMinimum, RequestOptional 및 RequestRefuse 권한 요청을 적용하기 위해 제거되었습니다.이러한 요청은 .NET Framework 4 이상을 기반으로 하는 코드에서 사용하면 안 됩니다.이 변경 내용 및 다른 변경 내용에 대한 자세한 내용은 .NET Framework 4의 보안 변경 내용을 참조하십시오. |
코드가 권한 P1에서 PermitOnly를 호출하고 다운스트림 호출자가 권한 P2를 요청하면, P1과 P2의 형식이 다르고 P2가 P1의 하위 집합이 아닌 경우에만 PermitOnly 호출에 의해 스택 워크의 결과가 달라집니다.
다음 코드 단편은 PermitOnly를 사용하여 보안 검사를 재정의하는 선언적 구문을 보여 줍니다. 호출자는 이 코드를 사용하여 사용자 인터페이스 리소스를 제외한 보호된 모든 리소스에 액세스할 수 없습니다. .
Option Explicit
Option Strict
Imports System
Imports System.Security.Permissions
Public Class MyClass1
Public Sub New()
End Sub
<UIPermissionAttribute(SecurityAction.PermitOnly, Unrestricted := True)> Public Sub
ReadRegistry()
'Access a UI resource.
End Sub
End Class
using System;
using System.Security.Permissions;
public class MyClass
{
public MyClass() {
}
[UIPermissionAttribute(SecurityAction.PermitOnly, Unrestricted=true)]
public void ReadRegistry() {
//Access a UI resource.
}
}
다음 코드 예제는 PermitOnly 메서드를 사용하여 보안 검사를 재정의하는 명령적 구문을 보여 줍니다. 액세스가 부여될 사용자 인터페이스 리소스를 지정하는 PermissionState 개체가 UIPermission 생성자로 전달됩니다. 일단 PermitOnly 메서드가 호출되면 코드와 모든 호출자는 사용자 인터페이스 리소스에만 액세스하도록 사용될 수 있습니다.
Option Explicit
Option Strict
Imports System
Imports System.Security.Permissions
Public Class MyClass1
Public Sub New()
End Sub
Public Sub ReadRegistry()
Dim MyPermission As New UIPermission(PermissionState.Unrestricted)
MyPermission.PermitOnly()
'Access a UI resource.
End Sub
End Class
using System;
using System.Security.Permissions;
public class MyClass {
public MyClass() {
}
public void ReadRegistry() {
UIPermission MyPermission = new UIPermission(PermissionState.Unrestricted);
MyPermission.PermitOnly();
//Access a UI resource.
}
}