Freigeben über


Vorgehensweise: Erstellen von GenericPrincipal-Objekten und GenericIdentity-Objekten

Hinweis

Dieser Artikel gilt für Windows

Informationen zu ASP.NET Core finden Sie unter Übersicht über ASP.NET Core-Sicherheit.

Sie können die GenericIdentity-Klasse zusammen mit der GenericPrincipal-Klasse verwenden, um ein Autorisierungsschema zu erstellen, das unabhängig von einer Windows-Domäne vorhanden ist.

So erstellen Sie ein GenericPrincipal-Objekt

  1. Erstellen Sie eine neue Instanz der Identitätsklasse, und initialisieren Sie diese mit dem Namen, der in der Instanz enthalten sein soll. Im folgenden Code wird ein neues GenericIdentity-Objekt erstellt und mit dem Namen MyUser initialisiert.

    Dim myIdentity As New GenericIdentity("MyUser")
    
    GenericIdentity myIdentity = new GenericIdentity("MyUser");
    
  2. Erstellen Sie eine neue Instanz der GenericPrincipal-Klasse, und initialisieren Sie diese mit dem zuvor erstellten GenericIdentity-Objekt und einem Zeichenfolgenarray, das den Rollen entspricht, die Sie diesem Prinzipal zuordnen möchten. Im folgenden Codebeispiel wird ein Array mit Zeichenfolgen definiert, die eine Administrator- und eine Benutzerrolle angeben. Die GenericPrincipal-Instanz wird dann mit der vorherigen GenericIdentity-Instanz und dem Zeichenfolgenarray initialisiert.

    Dim myStringArray As String() = {"Manager", "Teller"}
    DIm myPrincipal As New GenericPrincipal(myIdentity, myStringArray)
    
    String[] myStringArray = {"Manager", "Teller"};
    GenericPrincipal myPrincipal = new GenericPrincipal(myIdentity, myStringArray);
    
  3. Verwenden Sie den folgenden Code, um den Prinzipal an den aktuellen Thread anzufügen. Dies ist hilfreich, wenn eine der folgenden Bedingungen zutrifft: Der Prinzipal muss mehrmals überprüft werden, muss durch anderen Code überprüft werden, der in der Anwendung ausgeführt wird, oder muss durch ein PrincipalPermission-Objekt überprüft werden. Sie können weiterhin rollenbasierte Überprüfung für das Prinzipalobjekt ausführen, ohne es an den Thread anzufügen. Weitere Informationen finden Sie unter Ersetzen eines Principalobjekts.

    Thread.CurrentPrincipal = myPrincipal
    
    Thread.CurrentPrincipal = myPrincipal;
    

Beispiel

Im folgenden Codebeispiel wird veranschaulicht, wie eine Instanz von GenericPrincipal und GenericIdentity erstellt wird. Mit diesem Code werden die Werte dieser Objekte in der Konsole angezeigt.

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

Wird die Anwendung ausgeführt, zeit sie in etwa die folgende Ausgabe an.

The Name is: MyIdentity
The IsAuthenticated is: True
Is this a Manager? True

Siehe auch