Ich bin dabei, ein Datenbankschema für das folgende Szenario zu erstellen:
- Es gibt Benutzer
- Benutzer haben Rollen (wie "Entwickler" oder "CEO")
- Rollen haben Anwendungen (wie "Topdesk")
- Anwendungen verfügen über Berechtigungen (z. B. "Update Knowledgebase").
- Eine Rolle kann Berechtigungen haben, wenn die Rolle bereits Zugriff auf die Anwendung hat
Unter der Annahme, dass keine Hochleistungsumgebung vorhanden ist (keine Geschwindigkeitsoptimierung erforderlich), wie lässt sich dieses Schema am besten implementieren? Die Datenbankumgebung kann MySQL, MSSQL sein ... es geht mehr um das relationale Datenbankdesign.
Ich selbst habe mir Folgendes ausgedacht:
Der Teil, über den ich am unsichersten bin, ist natürlich die Tabelle Applications_Permissions_Roles. Es ist eine Verknüpfungstabelle über einer anderen Verknüpfungstabelle. Ich habe das noch nie benutzt oder gesehen. Eine andere Möglichkeit wäre, es durch eine Verknüpfungstabelle zwischen Rollen und Berechtigungen zu ersetzen und dann Code oder Einschränkungen zu verwenden, um die erforderlichen Beziehungen sicherzustellen ... aber das scheint mir keine gute Lösung zu sein. Diese Dinge sollten auf Datenbankebene erzwungen werden, wenn dies überhaupt möglich ist (und es scheint möglich zu sein), nicht auf Codeebene.
Zweitens ist die Verknüpfung zwischen Permissions.Application und Applications.Id erforderlich? Ich verwende es, weil es möglicherweise keine Zeilen in Roles_Applications gibt (z. B. wenn Sie gerade eine neue Anwendung hinzugefügt haben) und es dann nicht möglich ist, herauszufinden, welche Berechtigungen zu welcher Anwendung gehören. Es ist auch ein einziger Bezugspunkt für die Suche, zu welcher Anwendung eine Berechtigung gehört. Ich denke, das ist richtig, aber es macht auch einen Kreis im Datenbankdesign. MSSQL-Fehler beim Versuch, ON_DELETE oder ON_UPDATE auf Kaskade zu setzen.
Irgendwelche Vorschläge, oder soll es so gemacht werden? Alle anderen Vorschläge bezüglich der Namenskonvention und dergleichen sind übrigens ebenfalls willkommen (möglicherweise als Kommentar).
Danke,
Luc
Bearbeiten: Titel geändert, hoffentlich klarer. Der vorherige war umfassender, aber wahrscheinlich zu kompliziert.
Roles_Applications
das eine echte Sache ist. Angesichts der Tatsache, dass alle Berechtigungen anwendungsspezifisch sind, scheint es Applications_Permissions
(was Sie gekennzeichnet haben Permissions
) zu geben, die dann über einen Datensatz in bestimmten Rollen zugewiesen werden können Applications_Permissions_Roles
. Roles_Applications
Tatsächlich scheint es sich um die grundlegendste Anwendungsberechtigung zu handeln - den einfachen Zugriff. Oder es wird behauptet, dass eine Rolle über bestimmte Berechtigungen für eine Anwendung verfügt, Sie müssen jedoch anderswo nachsehen, um festzustellen, welche.