Datamodel en rechten
Elke keer als ik weer een data model maak loop ik vaak tegen hetzelfde probleem aan. Het probleem van rechten (dat gebruik ik hier nu als voorbeeld)
Het probleem is dit, je wilt aan een gebruiker rechten koppelen, mag bepaalde dingen niet en wel. En dat het liefst gewoon op 1 veld.
Wat ik nu meestal doe is dat ik op deze manier (bitwise rechten) maar ikzelf vind dat nog erg omslachtig je moet altijd met PHP nog de rest bereken of het wel mag.
Het liefst wil ik dit alles met de database doen. Jullie zijn waarschijnlijk ook tegen dit probleem aangelopen en ik hoop dat jullie een oplossing hebben :)
(Ik gebruik hier dus rechten, maar het kan ook toegepast worden op tig andere dingen, zoals blok 1 wel laten zien, blok 2 niet, blok 3 wel, enz... ;-) )
Bedankt!
http://en.wikipedia.org/wiki/Access_control_list
Met Access Control Lists (ACL). In het Zend Framework zit bijv. al een ACL functie ingebouwd.
Met ACL doe je niet alles via de database, je moet nog steeds met PHP controleren of iets mag of niet, maar ik zou ook niet weten hoe je het anders zou willen doen!
Met Access Control Lists (ACL). In het Zend Framework zit bijv. al een ACL functie ingebouwd.
Met ACL doe je niet alles via de database, je moet nog steeds met PHP controleren of iets mag of niet, maar ik zou ook niet weten hoe je het anders zou willen doen!
rollen:
- id (pk)
- naam (text)
rechten:
- id (pk)
- naam
- omschrijving
rol_rechten:
- id (pk)
- id_rol (fk op de tabel rollen)
- id_recht (fk op de tabel rechten)
Iedere user krijgt 1 (één!) rol toegewezen en kan dus uitsluitend beschikken over de rechten binnen deze rol. Er kunnen dan onmogelijk conflicten (lees: veiligheidslekken) onstaan tussen verschillende rollen.
users:
- id (pk)
- id_rol (fk op de tabel rollen)
- naam
- etc.
Ps. De kolom "id" in de tabel rol_rechten kun je eventueel weglaten, dan moet je de primary key aanmaken op id_rol en id_recht. Ik zou het alleen niet (meer) adviseren, het is handiger om een pk te gebruiken die geen enkele betekenis heeft.
bovendien wil je een gebruiker niet apart rechten geven, maar alleen de rechten van de rol waar hij in zit. (denk maar aan je in functie gelijkstaande collega's, waarom zouden die wel in de administratie mogen komen, maar jij niet..)
Gewijzigd op 01/01/1970 01:00:00 door Terence Hersbach
- Rol A heeft per ongeluk DELETE-rechten gekregen. Dankzij het ontbreken van leesrechten ziet niemand deze fout en kan niemand deze fout misbruiken
- Rol B heeft leesrechten
Een user krijgt nu zowel rol A als rol B toegewezen met als gevolg dat hij nu ook de fout kan misbruiken.
Dit is maar een heel simpel voorbeeldje met slechts 2 rollen, met honderden rechten en tientallen rollen, ga je nog veel meer risico's nemen. Foutloze rollen zijn een illusie, ze worden door mensen aangemaakt en die maken nu eenmaal fouten.
Rechten worden niet per user uitgedeeld maar per rol. Iedere user met dezelfde rol heeft dus dezelfde rechten.
Quote:
Wanneer zij niet in de administratie mogen komen, hebben zij deze rechten blijkbaar niet nodig voor het uitvoeren van hun werkzaamheden. In een veilige omgeving is alles verboden wat niet noodzakelijk is.denk maar aan je in functie gelijkstaande collega's, waarom zouden die wel in de administratie mogen komen, maar jij niet..
Ps. Ik heb nog eens bij een bank RSO-taken verricht en heb dus enige ervaring met dit soort uitdagingen.
Ik heb het opgelost!