Compartir a través de


Cómo: Realizar comprobaciones de seguridad imperativas

Actualización: noviembre 2007

En el caso de una demanda imperativa, se puede llamar al método Demand del objeto PrincipalPermission para determinar si el objeto de entidad de seguridad actual representa la identidad especificada, la función especificada o ambas. Suponiendo que se ha creado apropiadamente un objeto PrincipalPermission denom¡nado MyPrincipalPermission, se puede llamar a una demanda imperativa con el código siguiente.

MyPrincipalPermission.Demand()
MyPrincipalPermission.Demand();

Ejemplo

En el ejemplo de código siguiente se utiliza una comprobación imperativa para garantizar que un objeto GenericPrincipal coincide con el objeto PrincipalPermission. Una comprobación imperativa es útil cuando muchos métodos u otros ensamblados del dominio de aplicación deben tomar determinaciones basadas en funciones. Aunque este ejemplo es sumamente simple, ilustra el comportamiento asociado a una petición basada en funciones.

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

Si el usuario escribe 1, se crean los objetos de identidad y principales necesarios para el acceso al método PrivateInfo. Si el usuario escribe cualquier otro carácter, no se crea ningún objeto de identidad ni principal y se inicia una excepción de seguridad cuando se llama al método PrivateInfo. Si el subproceso actual está asociado a un principal que tiene el nombre MyUser y la función de Administrator, se muestra el mensaje siguiente:

You have access to the private data!

Vea también

Conceptos

Comprobaciones de seguridad basada en funciones

Referencia

PrincipalPermission