Sdílet prostřednictvím


Postupy: Provádění imperativních kontrol zabezpečení

Pro imperativní požadavky můžete volat metodu Demand náležící objektu PrincipalPermission, pokud chcete zjistit, zda aktuální objekt zabezpečení představuje zadanou identitu, roli nebo obojí. Za předpokladu, že objekt PrincipalPermission je správně sestavený a nazvaný MyPrincipalPermission, imperativní požadavky mohou být volány pomocí následujícího kódu.

MyPrincipalPermission.Demand()
MyPrincipalPermission.Demand();

Příklad

Následující příklad kódu používá imperativní kontrolu k zajištění toho, aby GenericPrincipal odpovídala objektu PrincipalPermission. Imperativní kontrola je užitečná v případě, že mnoho metod nebo jiných sestavení v doméně aplikace musí učinit rozhodnutí založené na roli. V tomto příkladě je to velmi jednoduché, ilustruje chování asociované s požadavkem založeným na roli.

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

Pokud uživatel zadá 1, objekty zabezpečení a identity potřebné pro přístup k metodě PrivateInfo jsou vytvořeny. Pokud uživatel zadá jiný znak, nejsou vytvořeny žádné objekty zabezpečení a identity Jestliže je pak vyvolána metoda PrivateInfo, tak je vyvolána výjimka zabezpečení. Pokud je aktuální vlákno asociováno s objektem zabezpečení, který má název MyUser a roli Administrator, tak se zobrazí následující zpráva.

You have access to the private data!

Viz také

Odkaz

PrincipalPermission

Koncepty

Kontroly zabezpečení založené na rolích