HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Felhasználói információk lekérdezése, hozzáférés szabályozása


Példaprogram letöltése

6237 bájt

Ki az a felhasználó, aki futtatja a kódot? Melyik Windows felhasználói csoportba tartozik? E kérdésekre keresendő válaszok mellett azt is megvizsgáljuk, hogy miként szabályozható az, hogy egy adott felhasználó melyik függvényt futtathatja alkalmazásunkban és melyiket nem. Ezzel a lehetőséggel már az adott funkció elkészítésekor megszabhatjuk azt, hogy ez csak akkor futhasson, ha a felhasználó mondjuk tagja a Rendszergazda csoportnak. Ettől kezdve más felhasználók akkor sem férhetnek e funkcióhoz az alkalmazásunkban, ha ehhez véletlenül meghagynánk a lehetőséget.

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

Cikksorozat

#IDKategóriaCikk címeSorozat
4397Windows.NET Framework konfigurálása az operációs rendszerben1. rész
4446Windows.NET Framework konfigurációs snap-in2. rész


Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |