AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi DMS - Berechtigungssystem mit vererbbaren Berechtigungen
Thema durchsuchen
Ansicht
Themen-Optionen

DMS - Berechtigungssystem mit vererbbaren Berechtigungen

Ein Thema von Aviator · begonnen am 30. Aug 2016 · letzter Beitrag vom 2. Sep 2016
Antwort Antwort
Seite 2 von 3     12 3      
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#11

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen

  Alt 30. Aug 2016, 14:33
[...]
Im Prinzip würde ich die Ordnerhierarchie absteigen und immer überprüfen ob man den nächsten Schritt machen kann. Wenn keine neuen Rechte/Werte für Owner, Group oder Other gesetzt sind, werden jeweils die des Ordners darüber übernommen.
Das mit dem Übernehmen der Berechtigungen hatte ich mir eben so vorgestellt, dass die Rechte des Unterordners mit den Rechten des übergeordneten Ordner "verundet" werden. Also ParentFolder.Permissions and ChildFolder.Permissions . Die Frage ist nur, ob das so überhaupt machbar ist.

Und dann müsste das Flag Vererbung aktiviert des ChildFolders zuvor noch beachtet werden. Ist es nicht aktiviert, dann müssen die Rechte des Ordners nur genommen werden.

EDIT: Frage ob das so machbar ist gerade selbst beantwortet. Vor dem Problem stand ich bereits schonmal. Ein Verunden würde bewirken, dass zusätzliche Rechte im ChildFolder nicht übernommen werden. Ich würde also immer bei den Rechten meines Basisordners (nennen wir ihn Root) hängen bleiben.

Geändert von Aviator (30. Aug 2016 um 14:35 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen

  Alt 30. Aug 2016, 14:47
Müsste das nicht eher Verodern sein?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#13

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen

  Alt 30. Aug 2016, 14:58
Müsste das nicht eher Verodern sein?
Kommt halt drauf an was man machen will. Wenn das ein "ich darf den Ordner betreten"-Recht ist, dann würde verodern zum Beispiel keinen Sinn machen.

Man könnte auch ein Allow- und ein Deny-Rechteset einführen. Dann könnte man so etwas machen wie current := (inherited and not deny) or allow ... aber ob das Nutzer wirklich wollen/brauchen?
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.

Geändert von BUG (30. Aug 2016 um 15:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen

  Alt 30. Aug 2016, 15:01
Was ich meinte: Recht auf den aktuellen oder den übergeordneten Ordner (oder gff. dessen übergeordneten) -> OK, ansonsten kein Zugriff.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#15

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen

  Alt 30. Aug 2016, 15:08
Ist denn ein Ordner-Denken in einem DMS überhaupt der richtige Weg? Warum braucht man das da noch?
Wie erfolgt der Zugriff auf Dateien dann? Klick ich mich durch eine Ordnerstruktur?

Ich hätte jetzt gedacht man Filtert nach Kategorien, Sucht nach Stichworten, ...
Ralph
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#16

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen

  Alt 30. Aug 2016, 15:49
Ist denn ein Ordner-Denken in einem DMS überhaupt der richtige Weg? Warum braucht man das da noch?
Wie erfolgt der Zugriff auf Dateien dann? Klick ich mich durch eine Ordnerstruktur?

Ich hätte jetzt gedacht man Filtert nach Kategorien, Sucht nach Stichworten, ...
So soll es ja auch sein, aber um auch Dokumente ohne diese Stichworte zu finden, werden die ja schonmal grob irgendwo eingegliedert. Und das ist eben die Ordnerstruktur. Und es gibt eben Ordner wie bspw. die der Geschäftsführung, die nicht von jedem eingesehen werden dürfen.

Müsste das nicht eher Verodern sein?
Hmm ... irgendwie ja. Das müsste man sich nochmal genau anschauen. Aber irgendwo hast du doch Recht. Wenn ihc von oben nach unten durchgehe, dann habe ich im Root Verzeichnis das Recht lesen. Bleiben wir mal bei der Linux Abkürzung.

Code:
           r w x
Root   --- 1 0 1
L Sub1 --- 0 1 0 wird mit Vererbung zu 1 1 1
Ohne Vererbung würde ja nur das Recht des Sub1 Ordners genommen womit wieder nur Schreibrechte (w) vorhanden wären.
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#17

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen

  Alt 1. Sep 2016, 13:49
Hallo zusammen,

ich habe mir noch ein paar Gedanken über mein Berechtigungssystem gemacht. Vielleicht kann ja noch jemand etwas dazu sagen.

Meine Vorstellung ging in die Richtung, dass ich mir eine Klasse erzeuge die die Ordnerobjekte abbilden soll. Grob gesagt etwa so:
Delphi-Quellcode:
TDirectory = class(TInterfacedObject, I...)
public
  property Name: string read FName write FName;
  property InheritedPermissions: Boolean read FInheritedPermissions; // Zum Aufheben/Aktivieren der Vererbung muss explizit eine Funktion aufgerufen werden (würde theoretisch auch über den Setter funktionieren)
  property Directories: TObjectList<TDirectory> read FDirectories write FDirectories;
// property Groups: TObjectList<TGroup> read FGroups write FGroups; // Beinhaltet alle Gruppen, die diesem DirectoryObject zugeordnet sind. Kann man das noch optimieren? Hier wird wenn ich es richtig weiß ja nur ein Pointer auf meine Gruppen in die Liste übernommen, welche bereits in einer Hauptliste aller Gruppen gespeichert sind.
// property Users: TObjectList<TUser> read FUsers write FUsers; // Beinhaltet alle Gruppen, die diesem DirectoryObject zugeordnet sind. Kann man das noch optimieren? Hier wird wenn ich es richtig weiß ja nur ein Pointer auf meine Benutzer in die Liste übernommen, welche bereits in einer Hauptliste aller Benutzer gespeichert sind.
end;
Das Dumme ist jetzt, dass jede Gruppe und jeder Benutzer in jedem Verzeichnis andere Berechtigungen haben kann. Das heißt, dass das Benutzer- / Gruppenobjekt wiederum mit dem Berechtigungen eines Verzeichnisses gekoppelt werden müsste ohne, dass das Benutzerobjekt für jedes Verzeichnis extra instanziiert werden muss.

Die Berechtigungen für Benutzer und Gruppen müsste dann in einer Klasse abgelegt werden. Hier würde sich eine gemeinsame Basisklasse anbieten in der folgende zwei Properties für die Berechtigungen enthalten sind:

Delphi-Quellcode:
property Allowed: Integer read FAllowed write SetAllowed;
property Denied: Integer read FDenied write SetDenied;
Die Berechtigungen die ein Benutzer / eine Gruppe effektiv später hat, sollte dann so ausgerechnet werden können: (Ich bilde die Berechtigungen binär ab)


Eigentlich wollte ich die CODE-Tags dafür nehmen, aber da scheint es immer noch einen Bug zu geben. Mir wird zumindest nichts angezeigt.
Delphi-Quellcode:
Berechtigungen von Gruppen in Verzeichnis A:

Zuerst werden alle Gruppenberechtigungen Allowed und Denied mit OR miteinander verknüpft

           Allowed --- Denied

Gruppe 1: 0 1 1 0 0 --- 1 0 1 1 0
Gruppe 2: 0 1 0 0 1 --- 0 0 1 0 0
Gruppe 3: 0 0 0 0 1 --- 0 0 0 0 0
          ------------------------
          0 1 1 0 1 --- 1 0 1 1 0


Die Ergebnisse werden dann mit XOR verknüpft

Allowed: 0 1 1 0 1
 Denied: 1 0 1 1 0
         ---------
    XOR: 1 1 0 1 1

Zum Schluss muss das Ergenis wieder mit den eigentlichen Allowed Permissions mit AND verknüpft werden damit nicht plötzlich Denied Rechte als Allowed Rechte gewertet werden.


    XOR: 1 1 0 1 1
Allowed: 0 1 1 0 1
         ---------
         0 1 0 0 1
Das gleiche Verfahren sollte mit Benutzern ebenfalls funktionieren. Zum Schluss müssen beide Ergebniswerte wieder mit OR miteinander verknüpft werden, um die schlussendlich kombinierten Gruppen und Userrechte zu erhalten.

Jetzt die Frage an die Nerds : Gibt es hierfür noch eine schnellere Variante oder ist das die schnellste Lösung?

Und dann generell: Gibt es hierfür noch irgendwelche Vorschläge oder Ideen? Oder etwas was ich beachten sollte wenn ich es so mache? Das ist jetzt im Moment nur eine Idee bei der ich nicht weiß, ob ich mit dieser alles abbilden kann was ich vorhabe.

Geändert von Aviator ( 1. Sep 2016 um 15:09 Uhr) Grund: Fehler in Beispielwerten korrigiert
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#18

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen

  Alt 1. Sep 2016, 15:15
Nur mal zur Praktikabilität ne Frage. Müsste man nicht irgendwas wählen, dass man nachher leicht schon auf Datenbankebene prüfen kann (SQL o. SP)? Es bringt ja nichts sich erst alle Ordner oder so ins Programm zu laden um dann zu checken, was der Benutzer sehen darf.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
795 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen

  Alt 1. Sep 2016, 15:29
Ich würde Rollen anlegen, denen Personen zugeordnet werden können.
Das bedeutet, dass für jeden Standardfall (Projekte, Angebote, Ausschreibungen, Kundenaufträge, Lieferaufträge etc.) eine Rolle angelegt werden muss. Jedem Dokument, das neu im DMS aufgenommen wird, muss eine oder mehrere Rollen zugewiesen werden und zwar vom Eigentümer (Ersteller) des Dokuments. Ggf. kann man sogar darüber nachdenken, dass der Eigentümer Rollen für spezielle Fälle anlegen kann...

Auf jeden Fall ist jetzt die Suche nach einem Dokument auf die Dokumente eingeschränkt, die einer oder mehrerer Rollen zugewiesen sind.

Ich stelle es mir sehr schwierig und sehr Zeitraubend vor, bei der Suche nach Dokumenten ALLE Verzeichnisse zu durchwühlen, für die der Suchende Berechtigungen hat.

Einen Tod muss man immer sterben, aber ein Rollen-System ist relativ einfach zu implementieren, der Pflegeaufwand für Standardrollen relativ gering und die Last hat eigentlich der Eigentümer des Dokuments. Nur die Personalfluktuation stellt noch ein klein wenig Verwaltungsaufwand dar (neue Mitarbeiter aufnehmen, ausgeschiedene Mitarbeiter kennzeichnen).

Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#20

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen

  Alt 1. Sep 2016, 15:30
Nur mal zur Praktikabilität ne Frage. Müsste man nicht irgendwas wählen, dass man nachher leicht schon auf Datenbankebene prüfen kann (SQL o. SP)? Es bringt ja nichts sich erst alle Ordner oder so ins Programm zu laden um dann zu checken, was der Benutzer sehen darf.
Hallo jumpy,

danke für die Rückmeldung. Dein Ansatz ist schon richtig. Nur finde ich, dass solch komplexe Rechtesysteme in einer Anwendung einfacher umzusetzen sind, als über SQL oder eine SP. Zudem wollte ich später dem User evtl. die Möglichkeit geben, die Berechtigungen für einen Ordner anzufordern. Diese Anforderung soll dann an einen User gerichtet sein, der die RoleAssignment Berechtigung für den Ordner besitzt. In der Regel der Besitzer des Ordners bzw. der Abteilungsleiter oder so.

Und zum Anfordern der Berechtigungen sollte der Ordner dann auch bereits für den User sichtbar sein.

Es reicht ja, wenn die Dokumente nicht sichtbar sind, die der Benutzer nicht sehen soll. Es wird wahrscheinlich (danke für den Anstoß) aber auch doch noch ein Recht geben, um das Auflisten der Subdirectories zu verhindern.

Ich trage gerade mal in einer Word Datei alle Dinge zusammen, die das Rechtesystem später haben soll. Ist doch schon ziemlich kompliziert. Deshalb hoffe ich auf eure Hilfe. Ich kann mir nicht vorstellen, dass noch niemand ein Rechtesystem in seinem Programm verbaut hat.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz