Voor mijn werk ben ik bezig met het ontwikkelen van een editor. Aan deze editor komt een complete file-explorer en daarbij horend user- en rechtensysteem.
In het systeem komen voornamelijk 4 typen voor:
- Group
- User
- Folder
- File

Om de rechten over deze typen vast te kunnen leggen, is er een rechtentabel nodig die twee typen met elkaar verbind en aangeeft wat voor recht van toepassing is (denk aan read, write of delete). Het probleem is dat zowel Object1ID als Object2ID slaat op een ID uit File/Folder/Group of User. Een User kan bijv. een permission over een File hebben, maar de permission table kan ook gebruikt worden om aan te geven dat een Group een permissie heeft over een Folder. Of een Group over een User (recht van password resetten).
Zelf dachten we er aan om een Object table te maken en ieder type een ObjectID te geven. Daarmee maak je het mogelijk om in de Permission table een ObjectID te gebruiken en heb je dus 1 tabel waar de FK naar wijst.

Het probleem hierbij is dat er altijd maar 1 weg mogelijk is. Je kan via een File/Group/User/Folder zijn object opvragen en zo kijken wat de permissions zijn, maar je kan nooit via een ObjectID terugvinden of dit een User/Group/Folder/File was zonder alle tabellen af te gaan en te kijken of het ObjectID hierin voorkomt.
We dachten eerst dat Inheritance hierbij uitkomst zou bieden, helaas is hier sowieso PostgreSQL voor nodig en dit voorkomt het probleem waarschijnlijk niet volledig. Over de inheritance oplossing ging onderstaand topic:
[SQL] Overerving
Bij meerdere applicaties blijft komt dit probleem terug. Denk bijvoorbeeld aan een inlogsysteem dat met verschillende type gebruikers werkt. Hoe koppel je dan 1 username aan wellicht 5 verschillende tabellen. Een FK loopt tenslotte altijd maar naar 1 tabel.
Alle hulp is welkom.
In het systeem komen voornamelijk 4 typen voor:
- Group
- User
- Folder
- File
Om de rechten over deze typen vast te kunnen leggen, is er een rechtentabel nodig die twee typen met elkaar verbind en aangeeft wat voor recht van toepassing is (denk aan read, write of delete). Het probleem is dat zowel Object1ID als Object2ID slaat op een ID uit File/Folder/Group of User. Een User kan bijv. een permission over een File hebben, maar de permission table kan ook gebruikt worden om aan te geven dat een Group een permissie heeft over een Folder. Of een Group over een User (recht van password resetten).
Zelf dachten we er aan om een Object table te maken en ieder type een ObjectID te geven. Daarmee maak je het mogelijk om in de Permission table een ObjectID te gebruiken en heb je dus 1 tabel waar de FK naar wijst.
Het probleem hierbij is dat er altijd maar 1 weg mogelijk is. Je kan via een File/Group/User/Folder zijn object opvragen en zo kijken wat de permissions zijn, maar je kan nooit via een ObjectID terugvinden of dit een User/Group/Folder/File was zonder alle tabellen af te gaan en te kijken of het ObjectID hierin voorkomt.
We dachten eerst dat Inheritance hierbij uitkomst zou bieden, helaas is hier sowieso PostgreSQL voor nodig en dit voorkomt het probleem waarschijnlijk niet volledig. Over de inheritance oplossing ging onderstaand topic:
[SQL] Overerving
Bij meerdere applicaties blijft komt dit probleem terug. Denk bijvoorbeeld aan een inlogsysteem dat met verschillende type gebruikers werkt. Hoe koppel je dan 1 username aan wellicht 5 verschillende tabellen. Een FK loopt tenslotte altijd maar naar 1 tabel.
Alle hulp is welkom.
Any sufficiently advanced technology is equivalent to magic.