rechten
Ik ben benieuwd hoe jullie de rechten toekennen voor iets op een inlogpagina.
In mijn database werk ik met een level welke ik opsla in een session.
In mijn code kijk ik via functie ifLevel(levelniveau) of de ingelogde gebruiker iets mag. Op deze manie heb ik wel een rol(admin, superadmin,...) maar kan ik geen specifieke rechten geven en is alles oplopend. Hoe hoger hoe meer je mag.
Welke systeem volgen jullie?
Eventueel voor en nadelen.
Jan
Eigenlijk een RBAC-systeem, waarbij je gebruik maakt van rechten die niet overervend zijn, en elke groep verschillende rechten kan hebben.
In de tabel met leden zitten kolommen met verschillende rechten. Waarde 0 is geen recht, waarde 1 is wel recht.
Dit is een hele foute methode, want als er bv een pagina bij komt waar je rechten voor moet hebben, moet je de tabel weer aanpassen.
Werken met niveaus zoals jij doet werkt bij mij niet, omdat er geen duidelijke structuur in zit bij mij. Leden hebben specifieke rechten, zonder dat daar echt een niveau aan te pas komt.
Ik ga bezig om dit systeem toe te passen, als dat nog up-to-date is
Ik heb ooit eens gekeken naar een ander systeem waarbij ik de rechten onderverdeeld over de acties die je uitvoert, zoals View, Move, Make, Edit, Delete. En vervolgens per recht een array maak met daarin wat iemand dan mag.
Het was tevens ook mooi uit te schalen naar ID's van entities. Zoals forumID 12 of PageID 5, om maar wat te noemen. Verder werkte het ook met overerving omdat elke user meerdere rechtengroepen kon hebben. Voor admin-rechten hoefde je dus alleen een groep te hebben met alleen maar de rechten voor je admin-paneel, en deze groep toe te voegen aan de user.
Helaas op een testcase na heb ik nooit in mijn site ingebouwd, omdat de site toch minder populairder werd, en ik geen zin had om een hele aanpassing te doen. het idee heb ik ooit eens gelezen op Gathering of Tweakers.
Gewijzigd op 19/06/2015 12:20:02 door - Ariën -
Zo kun je naar keuze rechten toekennen aan individuele gebruikers, aan gebruikersgroepen en aan een combinatie van beide. Met 64 bits kun je daarmee heel ver komen en binaire vergelijkingen zijn supersnel.
Code (php)
1
2
3
4
2
3
4
0 0 0 0 0 1 0 1 Rechten gebruikersgroep A
0 0 1 1 0 1 0 0 + Rechten gebruikersgroep B
---------------
0 0 1 1 0 1 0 1 Gebruiker is lid van groep A en B
0 0 1 1 0 1 0 0 + Rechten gebruikersgroep B
---------------
0 0 1 1 0 1 0 1 Gebruiker is lid van groep A en B
In andere gevallen gebruik ik een TINYINT UNSIGNED van 0 t/m 255 voor oplopende rechten. Dan mag 0 helemaal niets, is 254 een admin die alles mag en is 255 de super user of "eindbaas" die zelfs een admin kan overrulen. Voordeel van zo'n oplopende schaal is dat je de toegang tot componenten kunt regelen met een eenvoudige if (x >= 254) bijvoorbeeld. Een nadeel is dat je vooraf moet bedenken hoe die oplopende schaal precies in elkaar zit en je achteraf lastig een niveau kunt tussenvoegen.
access control list implementatie die hier al eerder min of meer ter sprake kwam.
Mogelijk geef je dit wat ideeen om je eigen ding te rollen.
Ik gebruik mijn eigen Mogelijk geef je dit wat ideeen om je eigen ding te rollen.
Gewijzigd op 19/06/2015 14:43:53 door Thomas van den Heuvel
Gewijzigd op 20/06/2015 14:26:11 door Paco de Wulp
- Aar - op 19/06/2015 12:14:26:
Ja, voor mijn profielensite gebruikte ik ook dit ongenormaliseerde systeem, waarin ik de rechten per database-veld beschreef. Niet zo heel netjes inderdaad!
Ik heb ooit eens gekeken naar een ander systeem waarbij ik de rechten onderverdeeld over de acties die je uitvoert, zoals View, Move, Make, Edit, Delete. En vervolgens per recht een array maak met daarin wat iemand dan mag.
Het was tevens ook mooi uit te schalen naar ID's van entities. Zoals forumID 12 of PageID 5, om maar wat te noemen. Verder werkte het ook met overerving omdat elke user meerdere rechtengroepen kon hebben. Voor admin-rechten hoefde je dus alleen een groep te hebben met alleen maar de rechten voor je admin-paneel, en deze groep toe te voegen aan de user.
Helaas op een testcase na heb ik nooit in mijn site ingebouwd, omdat de site toch minder populairder werd, en ik geen zin had om een hele aanpassing te doen. het idee heb ik ooit eens gelezen op Gathering of Tweakers.
Ik heb ooit eens gekeken naar een ander systeem waarbij ik de rechten onderverdeeld over de acties die je uitvoert, zoals View, Move, Make, Edit, Delete. En vervolgens per recht een array maak met daarin wat iemand dan mag.
Het was tevens ook mooi uit te schalen naar ID's van entities. Zoals forumID 12 of PageID 5, om maar wat te noemen. Verder werkte het ook met overerving omdat elke user meerdere rechtengroepen kon hebben. Voor admin-rechten hoefde je dus alleen een groep te hebben met alleen maar de rechten voor je admin-paneel, en deze groep toe te voegen aan de user.
Helaas op een testcase na heb ik nooit in mijn site ingebouwd, omdat de site toch minder populairder werd, en ik geen zin had om een hele aanpassing te doen. het idee heb ik ooit eens gelezen op Gathering of Tweakers.
Zo iets als dit "http://www.sitepoint.com/role-based-access-control-in-php/ of http://code.tutsplus.com/tutorials/a-better-login-system--net-3461" bedoel je?
Gewijzigd op 20/06/2015 02:01:04 door johan de wit