Ik ben bezig met een Access Control Manager voor een webproject en vroeg mij af of mijn opzet wel goed is.
Mijn database ziet er als volgt uit

Zoals je kan zien zijn de gebruikers op gedeelt in groepen en worden rechten uitgedeelt op de groepen, het is niet mogelijk rechten te geven op gebruikers zelf.
de AROtree ziet er als volgt uit
In dit geval zijn de groepen dus ARO's Er wordt dus eerst gegeken of een ARO een AXO mag uitvoeren, vervolgens wordt gekeken op welke ACO deze AXO mag worden uitgevoerd. Deze informatie wordt opgehaald als een gebruiker inlogt en vervolgens opgeslagen in een sessie om de databaseload laag te houden.
de Sessie ziet er als volgt uit:
Code om te tree controleren is ongeveer als volgt:
Ik weet dat rbac op veel manieren is te implementeren, dit lijkt mij de meest eenvoudige. Ik heb niet gekozen voor bestaande oplossingen zoals phpGacl aangezien deze vaak te overdone zijn. Opmerkingen en/of aanmerkingen zijn meer als welkom.
Edit
De begrippen:
ARO, Access Request Object. Een object dat vraagt of een AXO mag worden uitgevoerd op een ACO
ACO, Access Controll object, hier worden een AXO op uit gevoerd door een ARO
AXO, Access Axiotn Object, de actie die door ARO wordt uitgevoerd op ACO.
Concreet stel je de vraag "Mag ARO AXO uitvoeren op AXO" of wel "Mag de actie bewerken uitvoeren op contentPagina".
- Piet is een ARO, hij vraagt immer om toestemming
- contentPagina is een ACO, er wordt gevraagd of een bewerking mag worden uitgevoerd op contentPagina
- bewerken is een AXO, het is de actie die Piet wil uitvoeren op contentPagina.
Mijn database ziet er als volgt uit

Zoals je kan zien zijn de gebruikers op gedeelt in groepen en worden rechten uitgedeelt op de groepen, het is niet mogelijk rechten te geven op gebruikers zelf.
de AROtree ziet er als volgt uit
code:
1
2
3
4
5
6
7
8
| ARO | |-AXO1 | |-ACO1 | |-ACO2 |-AXO2 | |-ACO1 | |-ACO2 |
In dit geval zijn de groepen dus ARO's Er wordt dus eerst gegeken of een ARO een AXO mag uitvoeren, vervolgens wordt gekeken op welke ACO deze AXO mag worden uitgevoerd. Deze informatie wordt opgehaald als een gebruiker inlogt en vervolgens opgeslagen in een sessie om de databaseload laag te houden.
de Sessie ziet er als volgt uit:
PHP:
1
2
3
4
5
6
7
| $_SESSION['user']['acl'] = array( 'createNew' = array('newsArticle', 'user','contentPage','ect...'), 'edit' = array('newsArticle', 'user','contentPage','ect...'), 'delete' = array('newsArticle', 'user','contentPage','ect...'), 'meerActions' = array('meerControlObjects'); ) |
Code om te tree controleren is ongeveer als volgt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| /* * @function aclCheck * @description Check if a ARO can perform a AXO on a ACO, returns true if aXO is allowed, flase if otherwise * @param string Action name * @param string Access Control Object name * @param int USerID optional * @return bool **/ function aclCheck($axo, $aco, $userID = $_SESSION['user']['userId']) { if($userID != $_SESSOIN['user']['userId']) { /* code om tree opnieuw te bouwen uit database voor betreffende userId */ } /*Check for ACL */ if(!is_array($_SESSION['user']['acl'])) { /* No ACL for this user */ return false; } if(!array_key_exists($axo, $_SESSION['user']['acl']) { /* No AXO's defined for this ARO */ return false; } /* Is ACO defined within this AXO? */ if(in_array($aco, $_SESSION['user']['acl'][$axo])) { return true; } return false; } |
Ik weet dat rbac op veel manieren is te implementeren, dit lijkt mij de meest eenvoudige. Ik heb niet gekozen voor bestaande oplossingen zoals phpGacl aangezien deze vaak te overdone zijn. Opmerkingen en/of aanmerkingen zijn meer als welkom.
Edit
De begrippen:
ARO, Access Request Object. Een object dat vraagt of een AXO mag worden uitgevoerd op een ACO
ACO, Access Controll object, hier worden een AXO op uit gevoerd door een ARO
AXO, Access Axiotn Object, de actie die door ARO wordt uitgevoerd op ACO.
Concreet stel je de vraag "Mag ARO AXO uitvoeren op AXO" of wel "Mag de actie bewerken uitvoeren op contentPagina".
- Piet is een ARO, hij vraagt immer om toestemming
- contentPagina is een ACO, er wordt gevraagd of een bewerking mag worden uitgevoerd op contentPagina
- bewerken is een AXO, het is de actie die Piet wil uitvoeren op contentPagina.
[ Voor 117% gewijzigd door Suepahfly op 16-07-2005 15:45 . Reden: ik deed verstuur ipv bekijk |:( ]