Porady: tworzenie obiektów GenericPrincipal i GenericIdentity
Uwaga
Ten artykuł dotyczy systemu Windows.
Aby uzyskać informacje o ASP.NET Core, zobacz Omówienie ASP.NET Core Security.
Można użyć klasy w połączeniu GenericIdentity z GenericPrincipal klasą, aby utworzyć schemat autoryzacji, który istnieje niezależnie od domeny systemu Windows.
Aby utworzyć obiekt GenericPrincipal
Utwórz nowe wystąpienie klasy tożsamości i zainicjuj je przy użyciu nazwy, którą chcesz przechowywać. Poniższy kod tworzy nowy obiekt GenericIdentity i inicjuje go przy użyciu nazwy
MyUser
.Dim myIdentity As New GenericIdentity("MyUser")
GenericIdentity myIdentity = new GenericIdentity("MyUser");
Utwórz nowe wystąpienie klasy GenericPrincipal i zainicjuj je przy użyciu wcześniej utworzonego obiektu GenericIdentity oraz tablicy ciągów reprezentujących role, które mają być skojarzone z tym podmiotem zabezpieczeń. Poniższy przykład kodu określa tablicę ciągów reprezentujących rolę administratora i rolę użytkownika. Parametr GenericPrincipal jest następnie inicjowany z poprzednią wartością GenericIdentity i tablicą ciągów.
Dim myStringArray As String() = {"Manager", "Teller"} DIm myPrincipal As New GenericPrincipal(myIdentity, myStringArray)
String[] myStringArray = {"Manager", "Teller"}; GenericPrincipal myPrincipal = new GenericPrincipal(myIdentity, myStringArray);
Użyj następującego kodu, aby dołączyć podmiot zabezpieczeń do bieżącego wątku. Jest to przydatne w sytuacjach, gdy podmiot zabezpieczeń musi zostać zweryfikowany kilka razy, musi zostać zweryfikowany przez inny kod uruchomiony w aplikacji lub musi zostać zweryfikowany przez PrincipalPermission obiekt. Nadal można przeprowadzić walidację opartą na rolach na obiekcie głównym bez dołączania go do wątku. Aby uzyskać więcej informacji, zobacz Zastępowanie obiektu głównego.
Thread.CurrentPrincipal = myPrincipal
Thread.CurrentPrincipal = myPrincipal;
Przykład
W poniższym przykładzie kodu pokazano, jak utworzyć wystąpienie klasy GenericPrincipal i GenericIdentity. Ten kod wyświetla wartości tych obiektów w konsoli programu .
Imports System.Security.Principal
Imports System.Threading
Public Class Class1
Public Shared Sub Main()
' Create generic identity.
Dim myIdentity As New GenericIdentity("MyIdentity")
' Create generic principal.
Dim myStringArray As String() = {"Manager", "Teller"}
Dim myPrincipal As New GenericPrincipal(myIdentity, myStringArray)
' Attach the principal to the current thread.
' This is not required unless repeated validation must occur,
' other code in your application must validate, or the
' PrincipalPermission object is used.
Thread.CurrentPrincipal = myPrincipal
' Print values to the console.
Dim name As String = myPrincipal.Identity.Name
Dim auth As Boolean = myPrincipal.Identity.IsAuthenticated
Dim isInRole As Boolean = myPrincipal.IsInRole("Manager")
Console.WriteLine("The name is: {0}", name)
Console.WriteLine("The isAuthenticated is: {0}", auth)
Console.WriteLine("Is this a Manager? {0}", isInRole)
End Sub
End Class
using System;
using System.Security.Principal;
using System.Threading;
public class Class1
{
public static int Main(string[] args)
{
// Create generic identity.
GenericIdentity myIdentity = new GenericIdentity("MyIdentity");
// Create generic principal.
String[] myStringArray = {"Manager", "Teller"};
GenericPrincipal myPrincipal =
new GenericPrincipal(myIdentity, myStringArray);
// Attach the principal to the current thread.
// This is not required unless repeated validation must occur,
// other code in your application must validate, or the
// PrincipalPermission object is used.
Thread.CurrentPrincipal = myPrincipal;
// Print values to the console.
String name = myPrincipal.Identity.Name;
bool auth = myPrincipal.Identity.IsAuthenticated;
bool isInRole = myPrincipal.IsInRole("Manager");
Console.WriteLine("The name is: {0}", name);
Console.WriteLine("The isAuthenticated is: {0}", auth);
Console.WriteLine("Is this a Manager? {0}", isInRole);
return 0;
}
}
Po wykonaniu aplikacja wyświetla dane wyjściowe podobne do poniższych.
The Name is: MyIdentity
The IsAuthenticated is: True
Is this a Manager? True