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 estritamente necessária, uma permissão personalizado deve oferecer suporte à segurança declarativa de forma que os desenvolvedores podem especificar a permissão personalizado para usar a sintaxe declarativa para ações de segurança como solicitações, demandas, ou asserções. De fato, a permissão, requerem link, e as demandas de herança só poderão ser feitas declarativa imposta. Por esse motivo, a permissão de acesso a código personalizado não pode ser solicitada ou usado com as demandas de link ou demandas de herança a menos que você forneça suporte à segurança declarativa imposta. Este tópico descreve como implementar uma classe de Atributo que habilita o suporte declarativo de segurança da permissão personalizado.

Observação Observação

A versão do atributo de permissão personalizado deve ser definida em um assembly diferente do assembly no qual é referenciado. A permissão personalizado também deve ser definida nesse assembly. Isso é obrigatório para segurança declarativa, como o atributo é executado quando o assembly é carregado, e o atributo pode não ter sido criado na referência a ele está localizada. Tentar usar uma permissão declarativa no mesmo assembly no qual é definida na TypeLoadException que está sendo lançada.

Os atributos de segurança para declarações deve derivar (direta ou indiretamente) da classe de SecurityAttribute . Se a permissão é uma permissão de acesso a código, a classe do atributo é derivado de CodeAccessSecurityAttribute, que se deriva de SecurityAttribute. As classes do atributo de segurança devem implementar o método de CreatePermission , que cria uma instância do objeto de permissão de permissão personalizado associado. Observe que essa classe de permissão personalizado associado deve ser marcada com SerializableAttribute para ser serializado em metadados pelo compilador. Para obter mais informações, consulte Implementando uma permissão personalizado.

O código a seguir implementa uma classe de atributo para uma permissão CustomPermissionbooliana nomeada. Neste exemplo, a classe tem uma única permissão de propriedade booliano de Unrestricted 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 a propriedade interna de Unrestricted e cria a instância adequada de um objeto de CustomPermission . Quando só a propriedade de Unrestricted é usada nesse caso, outras classes personalizadas do atributo de permissão devem oferecer suporte a todos os possíveis estados dos objetos de permissão que dão suporte ao.

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

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

Contribuições da comunidade

Mostrar: