Einzelnen Beitrag anzeigen

berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#1

[Erledigt] JwSCL AccessCheck löst Gruppen nicht auf

  Alt 11. Aug 2015, 15:07
Zitat:
TL;DR
-Nimmt man einen Benutzer in eine Gruppe auf, muss Dieser sich erst neu anmelden, damit die Änderungen wirksam werden
-Der Benutzer ist laut AccessCheck NICHT Mitglied aller generischen Administrator-Gruppen (Domänen-Admins etc.), wenn das Programm nicht mit rechter Maustaste --> Als Administrator ausführen gestartet wurde.
Hallo!

Bezugnehmend auf http://www.delphipraxis.net/186129-m...ststellen.html und http://www.delphipraxis.net/184812-w...verwenden.html bin ich immernoch dabei zu prüfen, ob der aktuell angemeldete Benutzer (also der Context, in dem mein Programm läuft) die Berechtigung für etwas hat: Wenn eine Gruppe die Berechtigung hat, in welcher der Benutzer Mitglied ist, oder eine Gruppe, welche die zuerstgenannte Gruppe enthält usw. (Verschachtelung, Vererbung(?).

Zwischenfrage: Reden wir überhaupt von Vererbung, wenn ein Benutzer Mitglied in einer Gruppe ist, bzw. eine Gruppe Mitglied in einer Gruppe? Oder hab dies garnichts mit Vererbung zu tun? (Bei Dateien und Ordnern heißt vererben ja dass sich die Rechte auf die Unterordner auswirken, Gruppenberechtigungen wirken sich ja dort IMMER auf die enthaltetenen Gruppen und Benutzer aus...)


Ich bin nun soweit, dass ich meinen TJwSecurityDescriptor habe, in dem die Rechte etc. nun korrekt gespeichert sind. Mit
Delphi-Quellcode:
  CheckBox1.Checked := TJwSecureGeneralObject.AccessCheck(mySecurityDescriptor, NIL, 1, TMySampleMapping);
  CheckBox2.Checked := TJwSecureGeneralObject.AccessCheck(mySecurityDescriptor, NIL, 2, TMySampleMapping);
kann ich nun sogar -korrekt- prüfen, ob der aktuelle Benutzer etwas darf (hier: Ob das "Recht" bzw. Bit 1 bzw. 2 in dem SecurityDescriptor gesetzt ist). Wenn ich -auf meinem lokalen PC ohne Domäne- eine Gruppe berechtige, wirkt sich das Recht korrekt auf meinen Account aus, der Mitglied in dieser Gruppe ist, auch wenn mein Account nicht explizit im SecurityDescriptor erwähnt ist. Soweit alles super.

Wenn ich das Ganze nun in einer Domäne teste und dort eine Gruppe berechtige, in der mein aktuell angemeldeter Domänenbenutzer Mitglied ist, funktioniert das aber nicht und ich erhalte immer "False" zurück.

Scheinbar wird also nicht nachgeschaut, ob der aktuelle Benutzer Mitglied in dieser Gruppe ist. Wie kann man das korrigieren?

Edit:
1) Ich verwende für Clienttoken NIL, weil ich davon ausgehe, dass AccessCheck dann einfach meinen aktuellen Benutzeraccount nimmt. Spricht was dagegen?
2) Ich verwende MapGenericMask nicht, was in diesem Beispiel verwendet wird: http://www.delphipraxis.net/837437-post14.html , da ich einfach bei DesiredAccess nur das "Bit" übergebe, dessen Zugriff ich brauche (PowerOf2, also 1-2-4-8-16-...). Kombinationen wäre später auch möglich (z.B. bei "15" (Binär: "1111") müssten die ersten vier Bits/ACEs "Erlauben" sein). Ich denke mal, MapGenericMask brauch man nur, wenn bestimmte Bedingungen eingehalten werden müssen (z.B. bei Dateien erfordert "Schreiben" unbedingt auch das Recht "Lesen"), und deshalb kann ich es weglassen, oder?

Geändert von berens (12. Aug 2015 um 10:16 Uhr)
  Mit Zitat antworten Zitat