[DB] Rechtenstructuur vastleggen in database (ACL)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 29-01 12:01
Voor een website die ik aan het bouwen ben wil ik een rechtenstructuur gaan opzetten.
Ik was eerst van plan om gebruik te maken van ZEND_ACL (Zend framework), maar standaard wordt daarbij er vanuit gegaan dat alle rechten hard-coded worden vastgelegd in php code, terwijl ik het geheel juist zo flexibel mogelijk op wil zetten. Uiteindelijk ga ik waarschijnlijk nog steeds gebruik maken van zend_acl, maar bouw ik mijn eigen database backend er voor.

Om te beginnen heb ik dus een database structuur nodig om de verschillende gegevens vast te leggen. Ik wil er de volgende zaken mee kunnen vastleggen:

- één gebruiker kan meerdere rollen hebben
- één rol kan rechten hebben op verschillende objecten (resources)
- Per rol liggen ook de privileges vast die rol heeft (bijvoorbeeld read, write, delete, enz)

Met bovenstaande gegevens kom ik tot onderstaand stukje database model:

Afbeeldingslocatie: http://i53.photobucket.com/albums/g55/erikL1/Knipsel-5.jpg

Uiteraard nog zeer simplistisch, maar dit is slechts de eerste opzet.
De koppeling tussen st_priviledge en st_recourse heeft als doel het vast legen welke priviledges er bestaan voor een bepaalde recourse.

Waar ik nu naar op zoek ben is commentaar op dit model :) Alle input is welkom. (De namen van de koppeltabellen lijken trouwens nog nergens op, daar moet ik nog wat beters voor bedenken)

Acties:
  • 0 Henk 'm!

  • wizzkizz
  • Registratie: April 2003
  • Laatst online: 25-07 07:34

wizzkizz

smile...tomorrow will be worse

Waarom geen gebruik maken van Zend_Acl? Uiteraard maakt het gebruik van in de DB opgeslagen rechten/rollen/resources, je moet alleen zelf (statisch) zien uit te vissen welke resource er bij elke request hoort. Dit kan door hard-coded op te geven in je controller welke rechten er benodigd zijn voor een actie.

Het kan echter ook dynamischer, misschien kan deze link je dan op weg helpen: http://codeutopia.net/blo...and-storing-dynamic-acls/.

Make it idiot proof and someone will make a better idiot.
Real programmers don't document. If it was hard to write, it should be hard to understand.


Acties:
  • 0 Henk 'm!

  • AtlonXP1800
  • Registratie: Augustus 2001
  • Laatst online: 29-01 12:01
Uiteindelijk wil ik wel gebruik maken van zend_acl, maar out-of-the-box ondersteund het geen database backend, zend zegt er zelf dit over:
Zend_Acl was designed in such a way that it does not require any particular backend technology such as a database or cache server for storage of the ACL data. Its complete PHP implementation enables customized administration tools to be built upon Zend_Acl with relative ease and flexibility.
De link die je geeft ziet er interessant uit, daar ga ik even mee aan de slag, bedankt!

Ik zie trouwens dat het laatste voorbeeld aardig in de buurt komt van mijn idee, alleen heten de roles groups en de priviledges modes :+

[ Voor 12% gewijzigd door AtlonXP1800 op 24-10-2010 17:01 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Waarom gebruik je een aparte primary key voor je koppeltabellen? De 2 ingegeven id's moeten altijd uniek zijn dus kun je prima als primary key gebruiken. Je zult ook altijd zoeken op 1 van de 2 id's, niet de primary.

En hoe ga je om met rollen met tegenstrijdige rechten? (Dus een user heeft 2 rollen, 1 die toegang expliciet verbied en een ander die het expliciet toestaat, wat dan?)

[ Voor 28% gewijzigd door Verwijderd op 24-10-2010 19:45 ]