Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi DMS - Berechtigungssystem mit vererbbaren Berechtigungen (https://www.delphipraxis.net/190095-dms-berechtigungssystem-mit-vererbbaren-berechtigungen.html)

Aviator 30. Aug 2016 13:17

DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Hallo Delphianer,

ich bin gerade dabei, eine bestehende, von mir programmierte, Dokumentenverwaltung umzuprogrammieren. Und zwar geht es mir um den Aspekt der Sicherheit aller abgelegten Dokumente.
Um es kurz vorweg zu nehmen: Ich habe bereits Google und die Forensuche bemüht, jedoch nicht wirklich etwas zu dem Thema gefunden. :-D Alle gefundenen Themen bezogen sich direkt auf Windows oder Active Directory bzw. Domainumgebungen. :?

Aktuell wird es so gehandhabt, dass jedem Dokument die Benutzer mit bestimmten Berechtigungen zugeordnet werden. Dies ist allerdings sehr mühsam und zeitaufwendig. Je mehr Benutzer das DMS benutzen, desto schwieriger wird es, die Benutzer den Dokumenten zuzuordnen.

Im Zuge von anderen Umstellungen schwebte mir vor, ein komplett neues Berechtigungssystem zu erstellen.


Hier mal das Grundkonzept wie es später in etwa aussehen soll:
  • Die Dokumente sollen in Zukunft in einer Ordnerstruktur abgelegt werden
  • Jedem Ordner sollen Berechtigungen zugeteilt werden können
  • Berechtigungen werden hauptsächlich durch Gruppen vergeben, es kann aber auch nur ein Benutzer diesem Ordner zugeteilt werden
  • Die Berechtigungen sollen von übergeordneten Ordnern übernommen werden (Vererbung)
  • Es soll die Möglichkeit bestehen, die Vererbung zu deaktivieren bzw. die vererbten Rechte zu erweitern
  • Berechtigungen von einzelnen Dokumenten sollen ebenfalls bei Bedarf angepasst werden können. Hauptberechtigungen sind aber über die Ordner zu verteilen

Wie man sieht, soll das Berechtigungssystem in etwa aufgebaut werden wie es bei Windows der Fall ist. Zwar nicht mit ganz so vielen Rechten, aber es sollte wenn möglich erweiterbar sein.

Berechtigungen die auf jeden Fall existieren müssen:
  • Dokumente auflisten
  • Dokumente erstellen
  • Dokumente bearbeiten
  • Dokumente sperren / freigeben
  • Diese Berechtigungen sollen sowohl für eigene Dokumente, als auch für Dokumente von anderen Usern seperat verwaltet werden können --> Das bedeutet, dass bereits mindestens 8 Rechte pro Gruppe/Dokument/Benutzer existieren

In wie weit es sinnvoll ist, auch eine Berechtigung zum Auflisten der Ordner zu machen weiß ich nicht. Die Möglichkeit zur Erweiterung sollte aber generell für alles bestehen.

Die Dokumente werden mit einem Verweis auf den Speicherort der Datei in einer Datenbank abgelegt. Hierbei handelt es sich um den Microsoft SQL-Server falls das wichtig sein sollte.


Meine Frage ist jetzt, wie man so etwas überhaupt umsetzen kann. Wie muss bspw. meine Klasse aufgebaut sein um schnell an Informationen heranzukommen. Meine Benutzer- und Gruppenobjekte müssten ja einen Verweis auf die Gruppen haben, in denen diese Mitglied sind. Analog dazu braucht dies auch das Dokument. Oder wird an der Stelle dann nach dem Berechtigungen des Ordners geschaut und wiederrum kombiniert mit den Berechtigungen des Dokumentes?

Wie kann ich das System am effektivsten in mein Programm einbauen, ohne das ich nachher bei 100 Gruppen und 100 Usern 10 Minuten auf das Auflisten von Dokumenten warten muss, weil das Prüfen der Berechtigungen zu lange dauert?


Ich wäre um jeden Vorschlag dankbar, der in die gewünschte Richtung geht.

Wenn noch Rückfragen bestehen bin ich gerne bereit hier weitere Auskünfte zu geben.

BUG 30. Aug 2016 13:38

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Ich würde mir mal Unix-Dateisystem-Rechte angucken, dass geht ja in eine ähnliche Richtung. Damit kann man schon ganz gut arbeiten.

Sherlock 30. Aug 2016 13:43

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Wenn ich den Flieger richtig verstanden habe, ist das Was nicht das Problem, sondern das Wie. Und darüber gibt die Wikipedia an der Stelle leider wenig Auskunft. Ich denke aber, daß man mit Dictionaries gut voran kommen müsste. Die Zugriffe sind schnell, man muss sich halt überlegen, wie man das organisiert.

Sherlock

hoika 30. Aug 2016 13:56

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Hallo,
wo liegen den die Dokumente?
In einer DB oder auf der Platte.

Sherlock 30. Aug 2016 13:58

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Zitat:

Zitat von Aviator (Beitrag 1346162)
Die Dokumente werden mit einem Verweis auf den Speicherort der Datei in einer Datenbank abgelegt. Hierbei handelt es sich um den Microsoft SQL-Server falls das wichtig sein sollte.

Sherlock

mkinzler 30. Aug 2016 13:58

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Zitat:

Zitat von hoika (Beitrag 1346173)
Hallo,
wo liegen den die Dokumente?
In einer DB oder auf der Platte.

Wie es aussieht auf der Platte
Zitat:

Die Dokumente werden mit einem Verweis auf den Speicherort der Datei in einer Datenbank abgelegt.

Aviator 30. Aug 2016 14:16

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Zitat:

Zitat von mkinzler (Beitrag 1346175)
Zitat:

Zitat von hoika (Beitrag 1346173)
Hallo,
wo liegen den die Dokumente?
In einer DB oder auf der Platte.

Wie es aussieht auf der Platte
Zitat:

Die Dokumente werden mit einem Verweis auf den Speicherort der Datei in einer Datenbank abgelegt.

Danke @Sherlock und @mkinzler,

das ist korrekt. In der Datenbank wird lediglich vermerkt, dass es das Dokument gibt. Die eigentliche Datei wird auf einem Server gespeichert. Die Berechtigungen im Filesystem zu erstellen funktioniert leider nicht. Es handelt sich hierbei um einen Linux Server. Außerdem sollen ja auch die Dokumente schon je nach Berechtigungen des Benutzers im DMS angezeigt bzw. ausgeblendet werden. Da würden Filesystemberechtigungen nichts bringen.

Zitat:

Zitat von Sherlock (Beitrag 1346167)
Wenn ich den Flieger richtig verstanden habe, ist das Was nicht das Problem, sondern das Wie. Und darüber gibt die Wikipedia an der Stelle leider wenig Auskunft. Ich denke aber, daß man mit Dictionaries gut voran kommen müsste. Die Zugriffe sind schnell, man muss sich halt überlegen, wie man das organisiert.

Sherlock

Genau das ist jetzt die Frage. Reichen Dictionaries dafür aus oder muss es eine eigene Klassenstruktur sein. Und die Organisation der Dictionaries ist dann die nächste Frage.

Unix/Linux Dateisystemrechte reichen vmtl. nicht aus. Dort gibt es oft nur die Möglichkeit mit "rwx". Ich bräuchte aber eben die im ersten Beitrag angegebenen Möglichkeiten um die Rechte zu vergeben.

mkinzler 30. Aug 2016 14:25

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Ich würde deshalb auch auf die Speicherung im Filesystem verzichten und die "Dateien" auch gleich in der Datenbank ablegen.

BUG 30. Aug 2016 14:28

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Zitat:

Zitat von Aviator (Beitrag 1346181)
Dort gibt es oft nur die Möglichkeit mit "rwx". Ich bräuchte aber eben die im ersten Beitrag angegebenen Möglichkeiten um die Rechte zu vergeben.

Gerade um "rwx" ging es mir nicht.
  1. Die Dokumente sollen in Zukunft in einer Ordnerstruktur abgelegt werden :arrow: passt
  2. Jedem Ordner sollen Berechtigungen zugeteilt werden können :arrow: passt
  3. Berechtigungen werden hauptsächlich durch Gruppen vergeben, es kann aber auch nur ein Benutzer diesem Ordner zugeteilt werden :arrow: Owner-, Group-, und Other-Rechte
  4. Die Berechtigungen sollen von übergeordneten Ordnern übernommen werden (Vererbung) :arrow: OK, da müsste man sich etwas überlegen.
  5. Es soll die Möglichkeit bestehen, die Vererbung zu deaktivieren bzw. die vererbten Rechte zu erweitern :arrow: Späteres Anpassen der Rechte möglich, unabhängig von den Rechten des Ordners
  6. Berechtigungen von einzelnen Dokumenten sollen ebenfalls bei Bedarf angepasst werden können. Hauptberechtigungen sind aber über die Ordner zu verteilen :arrow: OK, da müsste man sich etwas überlegen.

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.

Aviator 30. Aug 2016 14:29

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Zitat:

Zitat von mkinzler (Beitrag 1346187)
Ich würde deshalb auch auf die Speicherung im Filesystem verzichten und die "Dateien" auch gleich in der Datenbank ablegen.

Hat zwar mit dem eigentlichen Problem wenig zu tun, aber darüber hatte ich mir ganz zu Beginn des Projektes bereits Gedanken gemacht. Die Dateien selbst sind ja verschlüsselt abgelegt. Es kommt also keiner dran ohne über das DMS zu gehen. Deshalb würde ich die Berechtigungen gerne über mein DMS laufen lassen. Wir haben eben auch auf die Größe der Datenbank geachtet und uns deshalb für die externe Speicherung entschieden.

Aviator 30. Aug 2016 14:33

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Zitat:

Zitat von BUG (Beitrag 1346189)
[...]
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
Delphi-Quellcode:
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.

DeddyH 30. Aug 2016 14:47

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Müsste das nicht eher Verodern sein?

BUG 30. Aug 2016 14:58

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Zitat:

Zitat von DeddyH (Beitrag 1346195)
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
Delphi-Quellcode:
current := (inherited and not deny) or allow
... aber ob das Nutzer wirklich wollen/brauchen?

DeddyH 30. Aug 2016 15:01

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Was ich meinte: Recht auf den aktuellen oder den übergeordneten Ordner (oder gff. dessen übergeordneten) -> OK, ansonsten kein Zugriff.

Jumpy 30. Aug 2016 15:08

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
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, ...

Aviator 30. Aug 2016 15:49

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Zitat:

Zitat von Jumpy (Beitrag 1346203)
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.

Zitat:

Zitat von DeddyH (Beitrag 1346195)
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.

Aviator 1. Sep 2016 13:49

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
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 :wink: : 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.

Jumpy 1. Sep 2016 15:15

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
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.

mikhal 1. Sep 2016 15:29

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
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

Aviator 1. Sep 2016 15:30

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Zitat:

Zitat von Jumpy (Beitrag 1346464)
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. :stupid:

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. :cyclops:

Aviator 1. Sep 2016 15:40

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Zitat:

Zitat von mikhal (Beitrag 1346465)
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

Hallo mikhal,

so ist es aktuell. Jedem Dokument werden die Mitarbeiter zugeordnet, die das Dokument sehen, downloaden oder bearbeiten können. Das hat sich aber für sehr schwierig und zeitraubend erwiesen. Niemand hatte mehr Lust die Dokumente einzuchecken, da es viel zu viel Arbeit war immer die Benutzerrechte zu hinterlegen. Rollen, oder wie ich es nenne, Gruppen, machen das ganze etwas einfacher, das stimmt. Aber auch die aktuelle Art der Ablage der Dokumente erwies sich als nicht wirklich gut.

Es soll später möglich sein, die Dokumente auf einen Ordner zu ziehen (aus dem Windows Explorer) und sich dann um nichts weiteres mehr kümmern zu müssen. Die Rechte des neuen Dokuments werden vom übergeordneten Ordner geerbt und das war es. Wenn dann spezielle Rechte gesetzt werden sollen, dann muss der User das eben machen, das ist klar.

Für die Suche der Dokumente gibt es ja immer noch die Eingabe von Schlagwörtern. Somit werden entweder alle Dokumente untereinander aufgelistet, oder aber man klickt sich durch die entsprechenden Ordner und erhält nur noch die Dokumente, die etwas mit dem Schlagwort zu tun haben.

mikhal 1. Sep 2016 15:45

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Nicht der Benutzer wird dem Dokument zugeordnet, sondern die Rolle. Innerhalb der Rolle können vielleicht auch noch Berechtigungen einschränkt oder erweitert werden. Der Komplexität sind keine Grenzen gesetzt.

Grüße
Mikhal

Aviator 1. Sep 2016 16:16

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Zitat:

Zitat von mikhal (Beitrag 1346470)
Nicht der Benutzer wird dem Dokument zugeordnet, sondern die Rolle. Innerhalb der Rolle können vielleicht auch noch Berechtigungen einschränkt oder erweitert werden. Der Komplexität sind keine Grenzen gesetzt.

Grüße
Mikhal

Ja das ist schon klar. Aber das Verfahren ist ja im Prinzip das selbe wie es jetzt schon ist. Jedes Dokument muss nach oder während dem Einchecken noch einmal angefasst werden um Berechtigungen zu hinterlegen. Und genau das soll eben mit dem neuen Berechtigungssystem wegfallen.

Ein simples Drag & Drop aus dem Windows Explorer auf das DMS soll reichen, um ein Dokument einzuchecken. Spezielle Berechtigungen können dann immer noch gesetzt werden wenn erforderlich.

mm1256 1. Sep 2016 16:37

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Zitat:

Zitat von mikhal (Beitrag 1346470)
...Ein simples Drag & Drop aus dem Windows Explorer auf das DMS soll reichen, um ein Dokument einzuchecken. Spezielle Berechtigungen können dann immer noch gesetzt werden wenn erforderlich.

Ich würde den Windows Explorer und auch alle anderen Datei-Zugriffsmöglichkeiten komplett außen vor lassen. Kein User hat Zugriff auf eine Datei, nur das DMS selber hat Zugriff, und weiß, wo die Daten/Dateien überhaupt liegen.

Die Ordnerstruktur wird wie beim Explorer im DMS angezeigt und dort werden auch die Rechte vergeben, z.B. aus der Klasse eingelesen. Wenn man die Rechtevergabe auf Dateiebene macht, viel Spass beim nächsten Systemwechsel :stupid:

Aviator 1. Sep 2016 17:03

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Zitat:

Zitat von mm1256 (Beitrag 1346480)
Zitat:

Zitat von mikhal (Beitrag 1346470)
...Ein simples Drag & Drop aus dem Windows Explorer auf das DMS soll reichen, um ein Dokument einzuchecken. Spezielle Berechtigungen können dann immer noch gesetzt werden wenn erforderlich.

Ich würde den Windows Explorer und auch alle anderen Datei-Zugriffsmöglichkeiten komplett außen vor lassen. Kein User hat Zugriff auf eine Datei, nur das DMS selber hat Zugriff, und weiß, wo die Daten/Dateien überhaupt liegen.

Die Ordnerstruktur wird wie beim Explorer im DMS angezeigt und dort werden auch die Rechte vergeben, z.B. aus der Klasse eingelesen. Wenn man die Rechtevergabe auf Dateiebene macht, viel Spass beim nächsten Systemwechsel :stupid:

Hallo mm1256,

ich glaube du hast dich verlesen. :wink:
Die Berechtigungen sollen natürlich nur im DMS abgebildet werden. Es ging mir lediglich darum, dass Dateien aus dem Windows Explorer ja einmalig dem DMS hinzugefügt werden müssen. Und das passiert in der Regel per FileOpen Dialog oder per Drag & Drop aus dem Explorer Fenster bzw. vom Desktop.

Sobald die Datei einmal im DMS ist, soll diese vom lokalen Rechner gelöscht werden. Alle anderen Aktionen mit dem Dokument werden über das DMS geregelt.

Deshalb betreibe ich ja den riesen Aufwand um ein eigenes Berechtigungssystem zu erstellen. Nur ist das sehr viel Arbeit, bei der ich auf eure Unterstützung hoffe.

An was muss ich alles denken, wie sollte meine Klassenstruktur aussehen, wie kann man Prozesse zu errechnen der Berechtigungen effizient(er) gestalten (siehe Beitrag #17). Da habe ich ja bzgl. der Berechnung schon einen Vorschlag gemacht. Eine andere Idee hatte ich bisher nicht. Und wenn ich ehrlich bin, gibt es in dem Fall nichts schnelleres außer binäre Operationen mit
Delphi-Quellcode:
and, or, xor
. Aber ich lasse mich auch gerne eines besseren beleheren. :-D

PS: Du hast in deinem Beitrag den falschen zitiert. :lol:

mm1256 1. Sep 2016 18:04

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Zitat:

Zitat von Aviator (Beitrag 1346482)
ich glaube du hast dich verlesen. :wink:
Die Berechtigungen sollen natürlich nur im DMS abgebildet werden. Es ging mir lediglich darum, dass Dateien aus dem Windows Explorer ja einmalig dem DMS hinzugefügt werden müssen. Und das passiert in der Regel per FileOpen Dialog oder per Drag & Drop aus dem Explorer Fenster bzw. vom Desktop.

Ich glaube nicht, dass ich mich verlesen habe. Wir haben uns vielleicht missverstanden. Eben dieses Hinzufügen per Drag and Drop mit dem Explorer würde ich verhindern, und mit einem Frontend welches du über das DMS bereitstellst (kann ja auch aussehen wie der Explorer) erledigen. In diesem Frontend würde ich jeglichen Zugriff auf die Dateien abwickeln, und hätte somit eine zentrale Stelle, an welcher ich (über das von dir schon angedachte Klassendesign) auch alle Zugriffsrechte abfrage und definiere. Im Prinzip sowas wie echtes Client-Server-Management. Nur das DMS selber weiß, wo die Daten liegen. Die Benutzer greifen selber nicht mehr direkt auf die Daten zu.

frapo 1. Sep 2016 18:42

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Puhh.. ich muss zugeben, dass ich sehr verwirrt bin als das ich das Ganze hier noch richtig nachvollziehen könnte.

Irgendwie habe ich was gelesen von MS-SQL-Server. Da wäre ich ganz bei mkinzler. Die Reports in die DB schieben und das wunderbare Rechtesystem einer ausgewachsenen Datenbank nutzen. Lässt eigentlich nie Wünsche offen.

Dann habe ich was von Linux-Server gelesen. Warum dann nicht Samba nutzen? Da kann man ebenso richtige dolle Benutzerrechte in aller erdenklicher Form nutzen.

Das alles selber machen zu wollen, klingt für mich wie das Rad neu erfinden zu wollen. Oder gibt es irgendwas konkretes, spezielles, dass beide Ideen nie und nimmer umsetzen könnten? Wie gesagt.. ich habe es vielleicht noch nicht so recht erfasst, das Problem.

Aviator 1. Sep 2016 22:41

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Zitat:

Zitat von mm1256 (Beitrag 1346483)
Zitat:

Zitat von Aviator (Beitrag 1346482)
ich glaube du hast dich verlesen. :wink:
Die Berechtigungen sollen natürlich nur im DMS abgebildet werden. Es ging mir lediglich darum, dass Dateien aus dem Windows Explorer ja einmalig dem DMS hinzugefügt werden müssen. Und das passiert in der Regel per FileOpen Dialog oder per Drag & Drop aus dem Explorer Fenster bzw. vom Desktop.

Ich glaube nicht, dass ich mich verlesen habe. Wir haben uns vielleicht missverstanden. Eben dieses Hinzufügen per Drag and Drop mit dem Explorer würde ich verhindern, und mit einem Frontend welches du über das DMS bereitstellst (kann ja auch aussehen wie der Explorer) erledigen. In diesem Frontend würde ich jeglichen Zugriff auf die Dateien abwickeln, und hätte somit eine zentrale Stelle, an welcher ich (über das von dir schon angedachte Klassendesign) auch alle Zugriffsrechte abfrage und definiere. Im Prinzip sowas wie echtes Client-Server-Management. Nur das DMS selber weiß, wo die Daten liegen. Die Benutzer greifen selber nicht mehr direkt auf die Daten zu.

Hmm. Du meinst also, dass ich noch eine Art Windows Explorer in mein Programm implementieren soll um die Daten erstmalig zur Dokumentenverwaltung hinzuzufügen? Wenn nicht, dann verstehe ich es nicht.

Wenn die Daten erst einmal im DMS eingecheckt sind, dann werden die an einem speziellen Ort abgelegt an den niemand mehr heran kommt ohne über das DMS die Datei/das Dokument zu öffnen.

Zitat:

Zitat von frapo (Beitrag 1346489)
Puhh.. ich muss zugeben, dass ich sehr verwirrt bin als das ich das Ganze hier noch richtig nachvollziehen könnte.

Irgendwie habe ich was gelesen von MS-SQL-Server. Da wäre ich ganz bei mkinzler. Die Reports in die DB schieben und das wunderbare Rechtesystem einer ausgewachsenen Datenbank nutzen. Lässt eigentlich nie Wünsche offen.

Dann habe ich was von Linux-Server gelesen. Warum dann nicht Samba nutzen? Da kann man ebenso richtige dolle Benutzerrechte in aller erdenklicher Form nutzen.

Das alles selber machen zu wollen, klingt für mich wie das Rad neu erfinden zu wollen. Oder gibt es irgendwas konkretes, spezielles, dass beide Ideen nie und nimmer umsetzen könnten? Wie gesagt.. ich habe es vielleicht noch nicht so recht erfasst, das Problem.

Ich hoffe ich kann nochmal etwas Licht ins Dunkel bringen.

In der Datenbank werden die Verweise auf ein Dokument abgelegt. Das Dokument, also die Datei, wird auf einem Server abgelegt auf den so niemand direkten Zugriff hat. Das ist ein Linux Fileserver auf den per Samba zugegriffen wird.

Alle anderen Metadaten wie Dateityp, Datum des Eincheckens usw. werden ebenfalls noch in der Datenbank abgelegt. Zudem sollen später die Berechtigungen (also binäre Zahlenwerte) pro Verzeichnis bzw. auch pro Dokument in der Datenbank gespeichert werden.

Ich wüsste nicht, wie ich aus meinem Programm heraus das Berechtigungssystem von Linux oder auch Windows nutzen sollte um genau diese Dinge abzubilden. Es wird ja auch noch einige andere Rechte außer Lesen, Schreiben, Ausführen geben die pro Verzeichnis/Dokument hinterlegt werden können.

Aber wie gesagt. Ich habe jetzt etwas im Kopf von dem ich ziemlich überzeugt bin, dass das klappen müsste. Wenn es eine bessere Idee (und eine Anleitung dazu ;)) gibt, dann bin ich auch dafür offen.

Aktuell würde mich aber interessieren, wie ich meine Klasse sinnvoll gestalten kann um das alles so effizient wie möglich abzubilden. Die Berchnung der einzelnen Rechte habe ich ja bereits in einem anderen Post dargestellt. Das müsste so eigentlich funktionieren. Es könnte höchstens sein, dass man das nochmal effizienter gestalten kann und man hierfür nicht "so viele" xor, or und and Operationen bräuchte.

HolgerX 2. Sep 2016 04:31

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Hmm..

[QUOTE=Aviator;1346509][QUOTE=mm1256;1346483]
Zitat:

Zitat von Aviator (Beitrag 1346482)
ich glaube du hast dich verlesen. :wink:

Alle anderen Metadaten wie Dateityp, Datum des Eincheckens usw. werden ebenfalls noch in der Datenbank abgelegt. Zudem sollen später die Berechtigungen (also binäre Zahlenwerte) pro Verzeichnis bzw. auch pro Dokument in der Datenbank gespeichert werden.

Die Berechtigungen als binärer Zahlenwert...

Ich glaube, da ist der Fehler!

Also ich würde nicht die Berechtigungen 'ausrechnen' sondern über die Datenbank beim Einchecken einer Datei diesem Eintrag über eine Verknüpfungstabelle die 'Gruppen' oder eventuell 'Benutzer' verlinken. Dies können N Verknüpfungen sein.

Wenn nun versucht wird auf ein 'Verzeichnis' in deinem DMS zuzugreifen, dann wird erst anhand dieser Verlinkungen das tatsächliche Recht ermittelt.

Wenn Du dieses 'Recht' direkt 'fest' bei der Datei einträgst ohne die Verknüpfungen, dann kannst Du beim Verändern eines Rechtes nicht wissen, woher die vorherigen Rechte kommen.

Alternativ kannst Du auch stat einer Gruppe oder eines Benutzers in der Verknüpfung auch den Parent in deiner visuellen Baumstruktur angeben und dann hat der Eintrag die gleichen Rechte, wie das übergeordnete Verzeichnis.

Achja, nach diesem Schema funktionieren übrigens auch Dateisysteme, dort ist die Datenabnk z.B. in der NTFS / ext3 Struktur eingebettet.

Aviator 2. Sep 2016 09:09

AW: DMS - Berechtigungssystem mit vererbbaren Berechtigungen
 
Zitat:

Zitat von HolgerX (Beitrag 1346512)
Die Berechtigungen als binärer Zahlenwert...

Ich glaube, da ist der Fehler!

Also ich würde nicht die Berechtigungen 'ausrechnen' sondern über die Datenbank beim Einchecken einer Datei diesem Eintrag über eine Verknüpfungstabelle die 'Gruppen' oder eventuell 'Benutzer' verlinken. Dies können N Verknüpfungen sein.

Wenn nun versucht wird auf ein 'Verzeichnis' in deinem DMS zuzugreifen, dann wird erst anhand dieser Verlinkungen das tatsächliche Recht ermittelt.

Hallo Holger du Frühaufsteher,

die Verlinkung der Gruppen wie du es nennst wollte ich ja auch in der Datenbank hinterlegen. Nun ist es aber ja so, dass dem Dokument eine oder mehrere Gruppen und ein oder mehrere Benutzer zugeordnet werden können. Diese Gruppen und/oder User können, wie das bei NTFS ja auch der Fall ist, pro Dokument natürlich auch unterschiedliche Rechte haben.

Wenn die Vererbung aktiviert ist, dann erhält das Dokument zwar die übergeordneten Rechte des Verzeichnis, aber ich kann ja trotzdem noch Berechtigungen hinzufügen bzw. sogar verweigern.

Also muss ja doch wiederum pro Dokument die eigentliche Berechtigung für den Benutzer aus Verzeichnis- und Dokumentrechten ermittelt werden. Und das pro Benutzer und aller dem Benutzer und Dokument zugeordneten Gruppen.

Und wenn die Vererbung deaktiviert wird, dann muss ich dem Dokument erst recht alle Informationen geben. Die Verlinkungen können auf das Dokument kopiert werden (wenn dies beim Deaktivieren gewünscht wird). Spezielle Dokumentrechte sind ja dann sowieso schon mit dem Dokument verknüpft.

Ich habe mir natürlich schon sehr viele Gedanken über das Problem gemacht. Aber vielleicht übersehe ich ja was und du kannst mir sagen, wie es einfacher gehen kann. Das Rechtesystem soll ja wirklich ziemlich stark an das NTFS Filesystem mit ACLs angelehnt sein.

Ein Problem das ich sicherlich noch habe ist, wenn ein Administrator im Hintergrund die Berechtigungen der Dokumente bzw. Verzeichnisse ändert. Sei es durch das Hinzufügen von Gruppen oder einfach nur die Erweiterung um bspw. das Recht "Verändern". Diese Rechte müssen dann ja ohne Neustart zur Laufzeit eingelesen werden. An der Stelle könnte ich mir noch etwas wie ein Aktualisieren Button vorstellen, der den ganzen Verzeichnisbaum neu aufbaut und die neuen Rechte einliest. Wie das automatisch im Hintergrund ablaufen könnte weiß ich (noch) nicht. Das selbe Problem bestünde aber auch für bereits in der Dokumentliste angezeigte Dokumente.

Zitat:

Zitat von HolgerX (Beitrag 1346512)
Wenn Du dieses 'Recht' direkt 'fest' bei der Datei einträgst ohne die Verknüpfungen, dann kannst Du beim Verändern eines Rechtes nicht wissen, woher die vorherigen Rechte kommen.

Alternativ kannst Du auch stat einer Gruppe oder eines Benutzers in der Verknüpfung auch den Parent in deiner visuellen Baumstruktur angeben und dann hat der Eintrag die gleichen Rechte, wie das übergeordnete Verzeichnis.

Also wie oben beschrieben möchte ich ja ein Flag haben das angibt, ob die Vererbung aktiviert oder deaktiviert ist. Die Idee mit dem Parent hatte ich auch schon. Allerdings dann später beim Erzeugen der Objektinstanz. Somit weiß ich, welches Verzeichnis das übergeordnete ist und kann dann immer eine Ebene nach oben gehen.


Ein anderes Problem ist, dass ich beim Suchen von Dokumenten nur noch eine Liste mit Dokumenten habe die aber nicht mehr in einer Verzeichnisstruktur dargestellt werden. Hier muss ich dazu sagen, dass ich darüber aktuell noch nicht wirklich nachgedacht habe. In der aktuellen Version ist es jedoch so. Somit hätte ich kein Parent Directory mehr um daran die Rechte abzuleiten. Aber da muss ich mir noch etwas überlegen. Bin aber auch für jeden Vorschlag dankbar. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17: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