Dan moet je rechten aan de rechten hangen: wie mag dit recht toekennen. Als je dat recht (om toe te kennen) niet hebt, mag je het niet toekennen (en zie je het ook niet). De super-admin mag dit dan voor alle rechten, en de rest alleen voor de rechten waar ze toegang tot hebben.
Ikzelf heb een rechtensysteem die werkt op een CRUD-model. Waarbij je rechten hebt voor Create, Read, Update, Delete. (acties). Voor het gemak heb ik ook Publish en Edit_own aan het rijtje toegevoegd.
Alle acties hebben diverse rechten zoals: Nieuws,Pagina's, Video's,Agenda,Gebruikersbeheer etc.
Verder heb ik diverse rollen (News Publisher, Junor News (zonder Publish recht), agendabeheerder) die in de database staan. Deze staan gekoppeld aan de rechten. Voor de rest is alles overervend zodat ik een gebruiker meerdere rollen kan toekennen waarbij de rechten opgeteld worden.
[size=xsmall]Toevoeging op 25/11/2022 11:47:41:[/size]
De CRUD-benadering van Ariën volg ik vaak ook, omdat die verschillende voordelen heeft. Niet alleen komen de rechten overeen met database-operaties, maar bovendien kun je ze gemakkelijk implementeren in REST API's én zijn ze heel eenvoudig te formaliseren met kleine integers en binaire waarden met binaire vergelijkingsoperatoren.
De "mapping" van basisrechten ziet er dan bijvoorbeeld zo uit:
Ikzelf gebruik geen bitwise systeem, maar ik sla de rechten in de database op op recht-niveau. De bron voor mijn script is een oude snippet-script wat ik jaren geleden op Gathering of Tweakers tegen kwam, maar prima voldeed aan mijn wensen. Uiteraard heb ik deze uit/omgebouwd om het te verbeteren voor in deze tijd.
Er komt uiteindelijk een prachtige array uit met de juiste rechten.
Eigenlijk zou ik die acties (move, view, edit etc..) en de ActionKind beter willen normaliseren. Maar dat komt nog wel eens.
?Onbekende gebruiker
27-11-2022 12:53
gewijzigd op 27-11-2022 12:53
Jan R op 25/11/2022 09:12:59
Hoe zouden jullie het doen?
Gewoon een recht maken om de rechten wel of niet te bewerken.
En ik zou het rechten-wiel niet zelf opnieuw uitvinden, dat is veel te omslachtig en zit standaard in de database server.
En voor wie geen PostGreSQL kan gebruiken: het kan ook in MySQL en MariaDB.
In ieder geval zou ik het niet in PHP doen, tenzij je alles met PHP wilt oplossen en niet de database wilt gebruiken. Of als je vast zit aan een ORM waar je niet onderuit kunt.