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!