Partilhar via


Como: Executar Verificações de Segurança Imperativas

Para uma demanda imperativa, você pode chamar o Por solicitação método do PrincipalPermission objeto para determinar se o objeto corrente representa a identidade especificada, função ou ambos. Assumindo um apropriadamente construído PrincipalPermission objeto chamadoMyPrincipalPermission, uma demanda 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 um GenericPrincipal coincide com o PrincipalPermission objeto.Uma verificação imperativa é útil quando muitos métodos ou outros conjuntos no domínio do aplicativo devem tomar decisões com base na função.Enquanto este exemplo é extremamente simples, 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 digitar 1, os objetos entidade de segurança de segurança e identidade necessário para acesso o PrivateInfo método são criados. Se o usuário digitar qualquer Outros caractere, não há objetos entidade de segurança de segurança e identidade são criados e uma exceção de segurança é lançada quando o PrivateInfo método é chamado. Se o thread corrente está associado com um entidade de segurança que tem o nome de MyUser e o Administrator função, a seguinte mensagem será exibida.

You have access to the private data!

Consulte também

Conceitos

Verificações de segurança baseada em função

Referência

PrincipalPermission