Toegangsniveau per 'module'

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jelle Hi

Jelle Hi

20/03/2013 19:03:41
Quote Anchor link
Hallo PHP'ers,

Ik ben bezig met een intranet voor de lokale omroep waar ik werk.
Nu kan je verschillende functie's hebben (DJ, Techniek, Bestuur, etc.) Maar natuurlijk kan je ook meerdere functie's hebben. Dus met een simpel toegangsniveau voor elk redt ik het niet, omdat je meerdere functies kan hebben (in theorie alles tegelijk).

Dus hoe kan ik per gebruiker zeggen voor welke module's hij/zij toegang heeft?

Ik hoop dat iemand met een oplossing komt!
 
PHP hulp

PHP hulp

22/12/2024 14:52:25
 
- Ariën  -
Beheerder

- Ariën -

20/03/2013 19:05:30
Quote Anchor link
Zelf zou ik denken aan een ACL, of RBAC systeem, waarmee je kan bepalen wie er toegang heeft, wie dingen mag aanpassen en wie dingen kan toevoegen en wie dingen mag verwijderen.
 
Koen Vlaswinkel

Koen Vlaswinkel

20/03/2013 19:10:10
Quote Anchor link
Als je dit in een database opslaat zou je dus een tabel users en een tabel user_ranks kunnen hebben met in de tabel user_ranks een foreign key naar users.
 
Tim S

Tim S

20/03/2013 19:17:32
Quote Anchor link
Ik heb zelf een RBAC systeem gemaakt,

je maakt een tabel users hierin staat een role id.
Dan maak je een tabel role_permissions met daarin roleid, object en permission

voorbeeld table role_permissions:
roleid|object|permission
1|news|view
1|news|add
2|news|view
3|een module|view
3|een module|delete

In gebruik ziet het er dan zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$identity
= unserialize($_SESSION['identity']);
        
        //als gebruiker geen toestemming heeft dan sturen we hem terug naar de login pagina
        if(!$identity->hasPermission('news','view')){
            
            header('Location: login');
            exit;
            
        }

?>


Je heb ook nog een tabel roles, maar deze is alleen voor informatie over de role zoals naam.

Ik denk dat dit is wat jij zoekt.
Gewijzigd op 20/03/2013 19:18:36 door Tim S
 
Jelle Hi

Jelle Hi

20/03/2013 19:22:24
Quote Anchor link
@Tim, dat is inderdaad wat ik zoek!

Zou je me misschien meer kunnen vertellen hoe je de tabellen hebt opgebouwd?
En in dat code-voorbeeld heb je een identity, wat houd die in?

Alvast bedankt!
 
Tim S

Tim S

20/03/2013 19:55:49
Quote Anchor link
Ik heb een authenticatie klasse, een user klasse en een role klasse.

In dit geval het het systeem geschreven voor mijn cms en heb ik voor de user en role klasse een soort van model
gemaakt omdat ik ook met een controller werk.

Ik zal een voorbeeld geven van de login pagina:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$auth
= $this->authentication;
        
        $result = $auth->authenticate($_POST['name'],$_POST['pass']);
        
        if($result->isValid()){
            
                        $identity = $auth->createAccessIdentity();
            $_SESSION['identity'] = serialize($identity);
            
            
            if($identity->hasPermission('module','view')){
                
                header('Location: index');
                
            }
            
        }

?>


De authenticatie klasse controleert of de gebruiker bestaat en zo ja maak ik een accessIdentity(identity) aan.
De identity is een instantie van de authenticatie klasse met daarin de rolepermissions roleid en user id.

Met de identity kan ik dan bepalen of de gebruiker toestemming heeft om iets te doen/bezoeken. Ook kan ik een userid of roleid opvragen om zo informatie over de gebruiker of role op te halen.

Om het wat duidelijker te maken hier ook de authenticatie klasse:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
class Authentication{
    
    private $userModel;
    private $roleModel;
    private $status;//houdt de status van de validatie, 1 = valid,
    private $roleId;//roleId van de gebruiker
    private $userId;//userId van de gebruiker
    private $userName;
    private $permissions = array();//toestemmingen die gebruiker heeft
    
    public function __construct(){
        
        $this->user = new model\User;
        $this->roleModel = new model\Role;    
        
    }

    
    public function getUserId(){
        
        return $this->userId;    
        
    }

    
    public function getRoleId(){
        
        return $this->roleId;
        
    }

    
    public function getUserName(){
        
        return $this->userName;
        
    }

    
    //kijk of de gebruiker is wij hij zegt dat hij is, zo ja update status en haal user en roleid op
    public function authenticate($name,$pass){
        
        if($this->user->isValid($name,$pass)){
            
            $this->user->conserveByCredentials($name,$pass);
            
            $this->roleId = $this->user->get('role_id');
            $this->userId = $this->user->get('id');
            $this->userName = $this->user->get('login_name');
            
            $this->status = 1;
                
        }

        
        return $this;
    }

    
    //als de gebruiker valid is return true, dez methode valideerd niet zelf
    public function isValid(){
        
        if($this->status == 1){
            
            return true;    
            
        }
        
    }

    
    //creer een toegangs object welke kan bepalen waar een gebruiker toestemming voor heeft.
    //In dit object staan ook de userId en de roleid ter identificatie

    public function createAccessIdentity(){
        
        $this->permissions = $this->roleModel->getPermissions($this->roleId);
        
        return $this;
        
    }

    
    public function __sleep(){
        
        return array('roleId','userId','userName','permissions');
        
    }

    
    public function hasPermission($module,$perm){
        
        foreach ($this->permissions as $permission){
            
            if($permission['object'] == $module && $permission['permission'] == $perm || isset($permission['admin']) && $permission['admin'] == 'admin'){
                
                return true;    
                
            }
            
        }
        
    }
    
}

 ?>


Ik wil je best wat verder helpen als je dit wat vindt maar dan moet je zelf ook wat maken en wat posten.
Gewijzigd op 20/03/2013 20:40:59 door Tim S
 
Jelle Hi

Jelle Hi

24/03/2013 15:38:56
Quote Anchor link
Ik stel m'n vraag maar even in dit topic,

Ik heb nu enkele tabellen:
Quote:
acl_apps
- app_id
- name
- description
acl_users
- user_id
- (verdere gebruikerinfo als ww en username)
acl_roles
- role_id
- name
- app_id
acl_user_perms
- role_id
- user_id


Stel ik kom nu op een pagina (app = 'Redactie'), dan moet er 'uitgezocht' worden wat ik mag, dus welke 'roles' ik heb. Dat staat in de acl_user_perms tabel.

Hoe controleer ik nou of ik toestemming heb? (de user_id staat in een sessie)
Gewijzigd op 24/03/2013 15:39:33 door Jelle Hi
 
Tim S

Tim S

24/03/2013 18:58:37
Quote Anchor link
In de tabel user moet een roleid staan. Met rollen is het normaalgesproken zo dat een gebruiker maar een rol kan hebben maar meerdere gebruikers wel dezelfde rol kunnen hebben. Per rol geeft je dan permisssies(rechten). Hier staat ook nog wat informatie over rollen en rechten, volgens mij niet een systeem wat jij zoekt
http://www.sitemasters.be/tutorials/1/1/554/PHP/Rechten_beheren
 



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.