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