Como: Executar Verificações de Segurança Imperativas
Para uma demanda imperativa, você pode chamar o por demanda método da PrincipalPermission o objeto para determinar se o objeto atual representa a identidade especificada, função ou ambos. Supondo que construído corretamente PrincipalPermission objeto chamado MyPrincipalPermission, uma demanda de imperativa pode ser chamada com o código a seguir.
MyPrincipalPermission.Demand()
MyPrincipalPermission.Demand();
Exemplo
O exemplo de código a seguir usa uma verificação imperativa para garantir que uma GenericPrincipal corresponde a PrincipalPermission objeto. Uma verificação imperativa é útil quando muitos métodos ou outros assemblies no domínio do aplicativo devem tomar decisões baseadas em função. Embora esse exemplo é extremamente simple, ilustra o comportamento associado a uma demanda baseada em função.
Imports System
Imports System.Security.Permissions
Imports System.Security.Principal
Imports System.Security
Imports System.Threading
Imports System.Security.Cryptography
Public Class MainClass
Public Overloads Shared Function Main() As Integer
Console.WriteLine("Enter '1' to use the proper identity or " _
& "any other character to use the improper identity.")
If Console.ReadLine() = "1" Then
' Create a generic identity.
Dim MyIdentity As New GenericIdentity("MyUser")
' Create a generic principal.
Dim MyString As [String]() = {"Administrator", "User"}
Dim MyPrincipal As New GenericPrincipal( _
MyIdentity, MyString)
Thread.CurrentPrincipal = MyPrincipal
End If
PrivateInfo()
Return 0
End Function
Public Shared Sub PrivateInfo()
Try
' Create a PrincipalPermission object.
Dim MyPermission As New PrincipalPermission( _
"MyUser", "Administrator")
' Demand this permission.
MyPermission.Demand()
' Print secret data.
Console.WriteLine(ControlChars.Cr & ControlChars.Cr & _
"You have access to the private data!")
Catch e As SecurityException
Console.WriteLine(e.Message)
End Try
End Sub
End Class
using System;
using System.Security.Permissions;
using System.Security.Principal;
using System.Security;
using System.Threading;
using System.Security.Cryptography;
public class MainClass
{
public static int Main(string[] args)
{
Console.WriteLine("Enter '1' to use the proper identity or " +
"any other character to use the improper identity.");
if(Console.ReadLine() == "1")
{
// Create a generic identity.
GenericIdentity MyIdentity = new GenericIdentity("MyUser");
// Create a generic principal.
String[] MyString = {"Administrator", "User"};
GenericPrincipal MyPrincipal =
new GenericPrincipal(MyIdentity, MyString);
Thread.CurrentPrincipal = MyPrincipal;
}
PrivateInfo();
return 0;
}
public static void PrivateInfo()
{
try
{
// Create a PrincipalPermission object.
PrincipalPermission MyPermission =
new PrincipalPermission("MyUser", "Administrator");
// Demand this permission.
MyPermission.Demand();
// Print secret data.
Console.WriteLine(
"\n\nYou have access to the private data!");
}
catch(SecurityException e)
{
Console.WriteLine(e.Message);
}
}
}
Se o usuário digita 1, os objetos principal e de identidade necessários para acessar o PrivateInfo método são criados. Se o usuário digitar qualquer outro caractere, são criados objetos de segurança e de identidade e uma exceção de segurança é lançada quando o PrivateInfo método é chamado. Se o thread atual está associado uma entidade que tem o nome MyUser e o Administrator função, a seguinte mensagem aparece.
You have access to the private data!