[ALG]Groepen hiërarchie en rechten

Pagina: 1
Acties:

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
Ik heb een groepen hiërarchie gemaakt in PHP en nu wil ik hier op een rechten structuur oplos laten zodat die de rechten van een gebruiker gaat uitrekenen via het groepen structuur

De groepen staan allemaal in een tree object en vanuit hier kan ik bepaalde nodes ophalen en vanuit die nodes de parent weer ophalen. Nu is alleen de vraag hoe ga ik verder.

Als rechten structuur heb ik volgende voor gemaakt. De database tabel ziet er als volgt uit.
code:
1
2
3
4
5
6
7
ruleid      // regel nummer
target      // dit kan een groep of gebruiker zijn
targetid      // id nummer van het target
level        // dit kan zijn een engine,module of core
name          // bij engine en core zal dit meestal none worden maar als level module is is dit de module naam
datalevel    // dit is de actie waarop het recht ligt
flag          // dit kan allow, deny of null zijn


Als instellen heb ik in gedachten hoe ik het ga doen. Ik kies eerst een groep en kan dan alle rechten hier voor instellen, maar als uitlezen loop ik tegen het volgende aan.
De tabel zit dus helemaal gevult met allemaal rechtregels en die via de boom structuur een array van worden gemaakt waarmee ik makkelijk de rechten kan uitlezen. Deze array zal ook gecached worden zodat de rechten één keer worden uitgerekend voor de gebruik en daarna uit cache gehaald worden.

Als output wil ik het volgende hebben $array[$level][$datalevel][$flag] zodat ik via een functie alleen maar drie dingen hoef door te geven om achter het recht van de gebruiker te komen.


Maar nu loop ik tegen het volgende probleem aan. Welke manier is nou het beste om deze rechten allemaal te door te nemen en ook via de boom structuur te kijken of de ouders ook toegang geven om het recht te hebben.

Verwijderd

Ik zou die structuur gaan normaliseren naar levels -> datalevels -> targets, en dan bij de groups in je targets tabel (waarom wil je daar ook users in opnemen?) die access flag opnemen.

Geen idee hoe diep je die groepen hierarchie in gedachten had, maar meer dan 3 lagen is in de praktijk redelijk overbodig, en dan is 't vrij simpel om bij het instellen van de rechten van een groep ook de rechten van de onderliggende groepen aan te passen. Idem bij het toevoegen van een groep of bij het verplaatsen van een groep binnen de hierarchie.
Voor groepen die hierarchisch onder een andere groep vallen zorg je er dan voor dat een recht nooit van 'deny' op 'allow' mag worden gezet, maar wel andersom. Waar heb je bij flag overigens null voor nodig? 'allow' en 'deny' lijkt me voldoende, eventueel aangevuld met 'readonly'.
Zelfs 'deny' is eigenlijk overbodig: komt een groep niet voor in de targets tabel, dan is 't automatisch 'deny'.

Als je die rechtentoekenning tijdens het toekennen goed voor elkaar hebt, hoef je runtime niet terug te zoeken in de hierarchie of 't wel mag. Totdat gebruikers tot meerdere groepen kunnen behoren, dan wordt 't wat lastiger... :)

[ Voor 5% gewijzigd door Verwijderd op 26-10-2006 22:43 ]