Condividi tramite


Procedura: Creare oggetti GenericPrincipal e GenericIdentity

Nota

Questo articolo si applica a Windows.

Per informazioni su ASP.NET Core, vedere Panoramica di Sicurezza ASP.NET Core.

È possibile usare la classe GenericIdentity insieme alla classe GenericPrincipal per creare uno schema di autorizzazione che esiste indipendentemente da un dominio di Windows.

Per creare un oggetto GenericPrincipal

  1. Creare una nuova istanza della classe di identità e inizializzarla con il nome che si desidera conservare. Il codice seguente crea un nuovo oggetto GenericIdentity e lo inizializza con il nome MyUser.

    Dim myIdentity As New GenericIdentity("MyUser")
    
    GenericIdentity myIdentity = new GenericIdentity("MyUser");
    
  2. Creare una nuova istanza della classe GenericPrincipal e inizializzarla con l'oggetto GenericIdentity creato in precedenza e una matrice di stringhe che rappresenta i ruoli che si desidera associare a questa entità. L'esempio di codice seguente specifica una matrice di stringhe che rappresenta un ruolo amministratore e un ruolo utente. Il GenericPrincipal viene quindi inizializzato con il precedente GenericIdentity e la matrice di stringhe.

    Dim myStringArray As String() = {"Manager", "Teller"}
    DIm myPrincipal As New GenericPrincipal(myIdentity, myStringArray)
    
    String[] myStringArray = {"Manager", "Teller"};
    GenericPrincipal myPrincipal = new GenericPrincipal(myIdentity, myStringArray);
    
  3. Usare il codice seguente per allegare l'entità al thread attuale. Questo è utile in situazioni in cui l'entità deve essere convalidata più volte, deve essere convalidata da un altro codice in esecuzione nell'applicazione o deve essere convalidata da un oggetto PrincipalPermission. Si può comunque eseguire la convalida basata sui ruoli sull'oggetto entità senza allegarlo al thread. Per maggiori informazioni, vedere Sostituzione di oggetti Principal.

    Thread.CurrentPrincipal = myPrincipal
    
    Thread.CurrentPrincipal = myPrincipal;
    

Esempio

L'esempio di codice seguente illustra come creare un'istanza di GenericPrincipal e di GenericIdentity. Questo codice visualizza i valori di questi oggetti nella console.

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

In esecuzione, l'applicazione visualizza un output simile al seguente.

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

Vedi anche