Datamodel en rechten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Han eev

Han eev

30/12/2008 10:36:00
Quote Anchor link
Hallo,

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!
 
PHP hulp

PHP hulp

18/12/2024 09:17:09
 

30/12/2008 10:42:00
Quote Anchor link
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!
 
Frank -

Frank -

30/12/2008 11:00:00
Quote Anchor link
Simpel datamodelletje met rollen:
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.
 
Terence Hersbach

Terence Hersbach

30/12/2008 11:44:00
Quote Anchor link
@pgFrank, op een Linux-systeem kan je ook in meerdere rollen zitten.. op een website heb je bijv. editors en publishers.. dus jouw verhaaltje gaat denk ik niet op..

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
 
Frank -

Frank -

30/12/2008 12:00:00
Quote Anchor link
@Terence: Een foutje in één rol hoeft niet direct gevolgen te hebben. Een combinatie met een andere rol kan echter tot zeer vervelende situaties leiden:
- 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:
denk maar aan je in functie gelijkstaande collega's, waarom zouden die wel in de administratie mogen komen, maar jij niet..
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.

Ps. Ik heb nog eens bij een bank RSO-taken verricht en heb dus enige ervaring met dit soort uitdagingen.
 
Han eev

Han eev

30/12/2008 13:39:00
Quote Anchor link
Bedankt voor jullie reacties!
Ik heb het opgelost!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.