Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

Adicionando suporte à segurança declarativa

Embora não seja estritamente exigido, uma permissão personalizada deve dar suporte a segurança declarativa para que sistema autônomo desenvolvedores podem especificar a permissão personalizada ao usar a sintaxe declarativa para ações de segurança, sistema autônomo solicitações, demandas ou declarações. Na verdade, solicitações de permissão, demandas, vincular e demandas de herança só podem ser feitas declarativamente. Por esse motivo, a permissão de acesso ao código personalizado não pode ser solicitada ou usado com as demandas de link ou demandas de herança, a menos que você fornecer suporte a segurança declarativa. Este tópico descreve como implementar um Atributo classe que ativa o suporte de segurança declarativa sua permissão personalizada.

ObservaçãoObservação:

Versão do atributo de personalizado permissão deve ser definido em um conjunto diferente do assembly no qual é referenciado. A permissão personalizada também deve ser definida no assembly. Isso é obrigatório para a segurança declarativa , porque o atributo é executado Quando o assembly é carregado e o atributo não pode ter sido criado no momento que a referência é encontrada. Tentando usar uma permissão declarativa no mesmo assembly em que ele está definido resultados em um TypeLoadException que está sendo lançada.

Atributos de segurança para declarações precisam derivar (direta ou indiretamente) o SecurityAttribute classe. Se a permissão é uma permissão de acesso ao código, o atributo classe deriva de CodeAccessSecurityAttribute, que deriva de Segurança atributo. Classes de atributo de segurança devem implementar o CreatePermission método, que cria uma instância do objeto de permissão da permissão personalizada associada. Observe que isso associados a classe de permissão personalizadas deve ser marcada com o SerializableAttribute para ser serializado em metadados pelo compilador. Para obter mais informações, consulte Implementando uma permissão personalizada.

O código a seguir implementa uma classe de atributos de permissão booliano chamado CustomPermission. Neste exemplo, a classe de permissão tem um único booleana Unrestricted propriedade que contém seu estado.

[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);
      }
   }
}

Nesse caso, CreatePermission verifica o interno Unrestricted propriedade e cria a instância apropriada de um CustomPermission objeto. Embora apenas o Unrestricted propriedade é usada nesse caso, outras classes de atributo de permissão personalizada devem oferecer suporte a todos os estados possíveis dos objetos de permissão que dão suporte.

O uso de CustomPermissionAttribute é ilustrado na seguinte declaração de demanda:

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

Contribuições da comunidade

Mostrar: