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çã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
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);
}
}
}
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)>
[CustomPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
Consulte também
Conceitos
Criando suas próprias permissões de acesso ao código
Implementando uma permissão personalizada