선언적 보안 지원 추가

업데이트: 2007년 11월

반드시 필요한 것은 아니지만, 사용자 지정 권한이 선언적 보안을 지원해야 개발자가 요구, 요청, 어설션 등의 보안 동작에 선언적 구문을 사용할 때 사용자 지정 권한을 지정할 수 있습니다. 실제로, 권한 요청, 링크 요청, 상속 요청은 선언적으로만 작성할 수 있습니다. 따라서, 선언적 보안이 지원되어야 사용자 지정 코드 액세스 권한이 요청되거나, 링크 요청 또는 상속 요청과 함께 사용될 수 있습니다. 이 항목에서는 사용자 지정 권한에 대해 선언적 보안을 지원하는 Attribute 클래스를 구현하는 방법을 설명합니다.

참고:

사용자 지정 권한의 버전 특성은 이 특성이 참조되는 어셈블리 이외의 다른 어셈블리에 정의되어야 합니다. 또한 사용자 지정 권한도 같은 어셈블리에 정의되어야 합니다. 어셈블리가 로드되면 버전 특성이 실행되는데, 이 특성이 만들어지지 않은 상태에서 참조될 수 있으므로 선언적 보안에서는 이것이 필수입니다. 버전 특성이 정의되어 있는 어셈블리에서 선언적 권한을 사용하려고 하면 TypeLoadException이 throw됩니다.

선언에 사용할 보안 특성은 SecurityAttribute 클래스에서 직접 또는 간접적으로 파생되어야 합니다. 권한이 코드 액세스 권한이면 특성 클래스는 SecurityAttribute에서 파생된 CodeAccessSecurityAttribute에서 파생됩니다. 보안 특성 클래스는 연결된 사용자 지정 권한으로 권한 개체의 인스턴스를 만드는 CreatePermission 메서드를 구현해야 합니다. 연결된 이 사용자 지정 권한 클래스는 SerializableAttribute로 표시되어야 컴파일러에 의해 메타데이터로 serialize됩니다. 자세한 내용은 사용자 지정 권한 구현을 참조하십시오.

다음 코드에서는 CustomPermission이라는 부울 권한에 대해 특성 클래스를 구현합니다. 이 예제에서 권한 클래스에는 이 클래스의 상태가 포함된 부울 Unrestricted 속성이 하나 있습니다.

<AttributeUsageAttribute(AttributeTargets.All, AllowMultiple := True)> Public Class 
CustomPermissionAttribute

   Inherits CodeAccessSecurityAttribute
   Private myUnrestricted As Boolean = False
   
   Public Shadows Property Unrestricted() As Boolean
      Get
         Return myUnrestricted
      End Get
      Set
         myUnrestricted = value
      End Set
   End Property
    
   Public Sub New(action As SecurityAction)
      MyBase.New(action)
   End Sub
   
   Public Overrides Function CreatePermission() As IPermission
      If Unrestricted Then
         Return New CustomPermission(PermissionState.Unrestricted)
      Else
         Return New CustomPermission(PermissionState.None)
      End If
   End Function
End Class
[AttributeUsageAttribute(AttributeTargets.All, AllowMultiple = true)]
public class CustomPermissionAttribute: CodeAccessSecurityAttribute
{
   bool unrestricted = false;

   public new bool Unrestricted
   {
      get{ return unrestricted; }
      set{ unrestricted = value; }
   }

   public CustomPermissionAttribute(SecurityAction action): base (action)
   {  
   }
   public override IPermission CreatePermission()
   {
      if(Unrestricted)
      {
         return new CustomPermission(PermissionState.Unrestricted);
      }
      else
      {
         return new CustomPermission(PermissionState.None);
      }
   }
}

이 경우 CreatePermission은 내부 Unrestricted 속성을 검사하여 CustomPermission 개체의 적절한 인스턴스를 만듭니다. 이 경우에는 Unrestricted 속성만 사용되었지만 다른 사용자 지정 권한 특성 클래스는 지원하는 권한 개체의 가능한 모든 상태를 지원해야 합니다.

다음 요청 선언에서는 CustomPermissionAttribute를 사용합니다.

<CustomPermissionAttribute(SecurityAction.Demand, Unrestricted := true)>
[CustomPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]

참고 항목

개념

사용자 고유의 코드 액세스 권한 만들기

사용자 지정 권한 구현

참조

SecurityAttribute

CodeAccessSecurityAttribute

SerializableAttribute

기타 리소스

특성을 사용하여 메타데이터 확장

코드 액세스 보안