![]() |
Userrechte in einer Domain auslesen
Hallo,
vielleicht gibt es dieses Thema schon an anderer Stelle, ich habe lange gesucht, aber nichts Passendes gefunden. Folgendes Problem : In meinem Programm habe ich eine eigene Anmeldung mit eigener Rechteverwaltung. Dies ist keine Windowsverwaltung, sondern darin wird definiert ob einer eine Aktion durchführen darf oder nicht. Nun möchte ich die Domain User verwenden um die Rechte zu indentifizieren : Also : User1 hat in der Domain Administratorrechte, User2 nur Userrechte. Wie man die User in eine Doamin findet und wie man eine SID in Klartext umwandelt habe ich schon gefunden. Was noch fehlt ist die Funktion wie man die Rechte eines User in der Domain findet . ähnlich wie : function GetUserRights (Domain,User:String):String; also GetUserRights ('','User1') und hearuskommt 'Administrator'. Wobei bei leerem Domainstring die aktuelle Domain verwendet werden soll. Hat sowas jemand schon gemacht ? :gruebel: Gruß gargano |
Re: Userrechte in einer Domain auslesen
Willst du nur wissen, ob der Benutzer (Domain) Administrator ist?
Oder willst du wissen, ob der Benutzer auf bestimmte Ressourcen (Datei, usw) zugriff hat? |
Re: Userrechte in einer Domain auslesen
Ich möchte nur wissen ob der Benutzer ein Administrator, User mit bestimmten Rechten oder in sonst einer Gruppe ist.
Die Sache ist die, daß der Benutzer meines Programms aber nicht der angemeldete User sein muß. Z.B. Frau Huber hat sich ins System eingeloggt, Frau Mayer will das Programm benutzen und dazu muß ich in der Domain überprüfen welche Rechte (Admin,User...) Frau Mayer hat. Gruß gargano |
Re: Userrechte in einer Domain auslesen
Also du willst nur wissen, zu welcher Domain-Gruppe ein Benutzer gehört, der sich bei dir anmeldet?
Dann nimm ![]() Oder willst du auch ![]() Um Zugriffsrechte an Dateien usw. festzustellen brauchst du immer ein ![]() ![]() Um das Token zu bekommen must du den Prozess (Thread) ![]() |
Re: Userrechte in einer Domain auslesen
Danke für den Tip,
entschuldige bitte meine unverschämte Frage : Du hast nicht zufällig ein Beispiel für NetUserGetGroups in Delphi zur Hand ? Gruß gargano |
Re: Userrechte in einer Domain auslesen
Hab ich nicht.
Jedoch das Internet stellt sogar mehrere zur Verfügung : ![]() und schau dir auch das an: ![]() |
Re: Userrechte in einer Domain auslesen
Danke, das dachte ich mir das in der Art gehen könnte.
Gehen könnte, dachte ich. Leider bringt mir die Funktion immer den Code für 'User not found' wenn ich den Domain Namen leer lass. Wenn im Domain was drin steht, dann dauert es etwas länger und er bringt 'Domain not found'. Der Name ist richtig als PWideChar eingetragen. Hast Du ein Idee an was das liegen kann ? :wall: :pale: :?: :coder2: Gruß gargano |
Re: Userrechte in einer Domain auslesen
Moin Gargano,
zeig' doch mal, wie Du die Funktion benutzt. Erfahrungsgemäss sind die NetXXX-Funktionen manchmal etwas tricky in der Anwendung. |
Re: Userrechte in einer Domain auslesen
Hallo Chris,
manchmal liegt die Lösung doch näher als erwartet. Ich habe anstatt des Domains den Domainnamen verwendet. Mit NetGetDCName(nil,pointer(DomainName),pointer(Domai n)); bekommt man die Domain heraus. Für die, die es interessiert hier der ganze Code :
Delphi-Quellcode:
[edit=Luckie]Delphi-Tags. Mfg, Luckie[/edit]
Function NetUserGetGroups(ServerName, UserName : lpWStr; Level : DWord; Var Buffer : Pointer; PrefMaxLen : DWord; EntriesRead, TotalEntries : lpDWord) : LongInt; stdcall; External 'NETAPI32.DLL';
procedure TForm1.Button3Click(Sender: TObject); Type USER_INFO_0 = Record Group_Name : PWideChar; End; TBuffer = array[0..1024] of Pointer; var Level : DWORD; PrefMaxLen :DWORD; PAdr : DWord; PBuffer : ^TBuffer; Buffer:TBuffer; entriesRead, totalEntries : DWORD; ResultNetApiStatus :NetAPIStatus; TheUser:Array[0..255] Of WideChar; User_Info_0_Struct : USER_INFO_0; i:Integer; domain,DomainName : PWideChar; begin Level:=0; PrefMaxLen:= 1024 ; StringToWideChar(DomainNameEdit.text,@DomainName,255); //get Domain Controller NetGetDCName(nil,pointer(DomainName),pointer(Domain)); DomainEdit.Text:=WideCharToString(domain); // nur zur Ansicht StringToWideChar(UserEdit.text,@TheUser,255); UserGroupMemo.Clear; ResultNetApiStatus:=NetUserGetGroups (domain,@TheUser, level, pointer(Pbuffer) , PrefMaxLen, @entriesRead, @totalEntries); If ResultNetApiStatus = 0 Then Begin For I := 0 To EntriesRead - 1 Do begin User_Info_0_Struct := USER_INFO_0(PBuffer[i]); UserGroupMemo.Lines.Add(WideCharToString(User_Info_0_Struct.Group_Name)); end; if (Domain <> nil) then NetApiBufferFree(Domain); if (pBuffer <> nil) then NetApiBufferFree(pBuffer); End; End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz