Ezeket a lehetőségeket a WindowsPrincipal osztály szolgáltatja.

IsInRole
Osztály: System.Security.Principal.WindowsPrincipal
public virtual bool IsInRole(
string role
);
Az IsInRole függvénnyel eldönthetjük, hogy az adott kódot futtató felhasználó beletartozik-e egy általunk megadott csoportba vagy sem.
Paraméterek
string role
A role paraméterben megadhatjuk sztringként leírva a csoportot DOMAINNAME\GROUPNAME vagy MACHINENAME\GROUPNAME formában.
Visszatérési érték
Igaz, ha a felhasználó a megadott csoport tagja.

IsInRole
Osztály: System.Security.Principal.WindowsPrincipal
public virtual bool IsInRole(
int rid
);
Az IsInRole függvénnyel eldönthetjük, hogy az adott kódot futtató felhasználó beletartozik-e egy általunk megadott csoportba vagy sem.
Paraméterek
int rid
A rid (role identifier) paraméterbe adhatjuk meg a csoport azonosító számát.
Visszatérési érték
Igaz, ha a felhasználó a megadott csoport tagja.

IsInRole
Osztály: System.Security.Principal.WindowsPrincipal
public virtual bool IsInRole(
WindowsBuiltInRole role
);
Az IsInRole függvénnyel eldönthetjük, hogy az adott kódot futtató felhasználó beletartozik-e egy általunk megadott csoportba vagy sem.
Paraméterek
WindowsBuiltInRole role
Előre definiált csoportokat adhatunk meg a role paraméterben.
Visszatérési érték
Igaz, ha a felhasználó a megadott csoport tagja.
Megjegyzés
A role paraméter a WindowsBuiltInRole felsorolt típus alábbi elemei közül az egyik lehet:
- AccountOperator
- Administrator
- BackupOperator
- Guest
- PowerUser
- PrintOperator
- Replicator
- System
- User

Identity
Osztály: System.Security.Principal.WindowsPrincipal
public virtual IIdentity Identity {get;}
Az Identity property-n keresztül érhető el az IIdentity interfész, melyből a felhasználóval kapcsolatos információk olvashatók ki. Ez az interfész négy különböző osztályban lett implementálva, így ez a property is ezek egyikét tartalmazza. A négy lehetséges osztály:
- GenericIdentity
- FormsIdentity
- PassportIdentity
- WindowsIdentity

Name
Osztály: System.Security.Principal.GenericIdentity
public virtual string Name {get;}
A Name property-ből olvasható ki a felhasználó neve, aki a kódot futtatja.

IsAuthenticated
Osztály: System.Security.Principal.GenericIdentity
public virtual bool IsAuthenticated {get;}
Az IsAuthenticated property értéke igaz, ha a felhasználó hitelesített.

AuthenticationType
Osztály: System.Security.Principal.GenericIdentity
public virtual string AuthenticationType {get;}
A hitelesítési módszert az AuthenticationType property tárolja.
A példaprogram
WindowsPrincipal osztály példányának létrehozásakor a konstruktor egy WindowsIdentity objektumot vár. Ezt legegyszerűbben a WindowsIdentity osztály statikus GetCurrent függvényétől szerezhetjük. Ez tartalmazza annak a felhasználónak az információt, mely az aktuális kódot futtatja. Ezeket az információkat ezután már egyszerűen megjeleníthetjük.
Private Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles button1.Click
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
wp = New WindowsPrincipal(WindowsIdentity.GetCurrent())
listBox1.Items.Add(("User name: " + wp.Identity.Name))
listBox1.Items.Add(("Authentication type: " + wp.Identity.AuthenticationType))
listBox1.Items.Add(("Is authenticated: " + wp.Identity.IsAuthenticated.ToString()))
Ha azt szeretnénk ellenőrizni, hogy az aktuális felhasználó tagja-e valamely csoportnak, akkor ehhez a CheckGroup belső függvényünket hívjuk meg, melynek paraméterként átadjuk azt a csoportazonosítót, melyre az ellenőrzést végeznénk el.
listBox1.Items.Add(CheckGroup(WindowsBuiltInRole.AccountOperator))
A CheckGroup függvény egy sztringet állít össze, melyben tudatja az ellenőrzésre átadott csoport megnevezését, valamint egy logikai értéket, mely leírja, hogy a felhasználó tagja-e ennek a csoportnak vagy sem.
Private Function CheckGroup(ByVal wbir As WindowsBuiltInRole) As String
Try
Return wbir.ToString() + ": " + wp.IsInRole(wbir).ToString()
Catch ex As Exception
Return wbir.ToString() + ": " + ex.Message
End Try
End Function
Hozzunk most létre egy olyan függvényt, melyet csak azok a felhasználók lesznek képesek futtatni, amelyek a Rendszergazda (Administrators) csoportba tartoznak.
Itt igen egyszerű a dolgunk: csupán egy PrincipalPermission attribútumot kell megadnunk, melyben megköveteljük, hogy melyik csoport tagjai férhetnek hozzá e függvényünkhöz. Ha más csoport tagja kívánja elérni programunk e funkcióját, akkor egy hiba keletkezik alkalmazásunkban, de a függvény nem fut le.
<PrincipalPermissionAttribute(SecurityAction.Demand, Role:="BUILTIN\Administrators")> _
Private Shared Function AdministratorFunction() As String
Return "AdministratorFunction lefutott"
End Function
Próbáljuk most az előbb létrehozott függvényt meghívni. Célszerű try - catch blokkot használni a hibakezelésre. Ha a Rendszergazda csoportba tartozunk, akkor ez a függvény gond nélkül lefut, ha viszont nem, akkor hiba keletkezik. A hibakezelésnél vizsgálhatjuk a hiba okát, hiszen az nem csak a hozzáférési jog hiányában következhet be, hanem egyéb okból is. Ha viszont SecurityException kivétel keletkezik, és ennek PermissionType property-jének értéke a PrincipalPermission típusával egyezik, akkor biztosak lehetünk abban, hogy a keletkezett hiba azért jött létre, mert olyan személy kívánta futtatni a függvényt, akinek nem adtunk ehhez jogosultságot.
Try
listBox1.Items.Add(AdministratorFunction())
Catch ex As SecurityException
If ex.PermissionType Is GetType(PrincipalPermission) Then
listBox1.Items.Add("AdministratorFunction futtatáshoz nincs joga")
Else
Throw ex
End If
End Try