1: <?php
2:
3: /**
4: * Pry Framework
5: *
6: * LICENSE
7: *
8: * This source file is subject to the new BSD license that is bundled
9: * with this package in the file LICENSE.txt.
10: *
11: * @version $Revision: 276 $
12: */
13:
14: /**
15: * Classe permettant la gestion de roles et de permissions.
16: *
17: * <code>
18: * $ACL = new Auth_ACl();
19: * $ACL->addRole('Writer',array('read','write'));
20: * $ACL->addPermission('Writer','delete');
21: *
22: * if($ACL->hasPermission('write'))
23: * echo 'ok';
24: * else
25: * echo 'ko';
26: * </code>
27: *
28: * @category Pry
29: * @package Auth
30: * @version 2.0.0
31: * @author Olivier ROGER <oroger.fr>
32: *
33: */
34: class Auth_ACL
35: {
36: /** Liste des roles associé */
37: private $roles = array();
38:
39: /** Liste des permissions triées par roles */
40: private $permissions = array();
41:
42: public function __construct()
43: {
44:
45: }
46:
47: /**
48: * Ajout d'un role
49: * @param string $roleName Nom du role
50: * @param array $permissions Les permissions associées au role
51: */
52: public function addRole($roleName,array $permissions)
53: {
54: $this->roles[] = $roleName;
55: $this->permissions[$roleName] = array();
56: foreach($permissions as $perm)
57: $this->permissions[$roleName][$perm] = true;
58: }
59:
60: /**
61: * Ajout d'une permission à un role spécifique
62: * @param string $roleName Nom du role concerné
63: * @param string $permission Nom de la permission
64: */
65: public function addPermission($roleName,$permission)
66: {
67: if(!isset($this->permissions[$roleName]))
68: $this->permissions[$roleName] = array();
69:
70: $this->permissions[$roleName][$permission] = true;
71: }
72:
73: /**
74: * Supprime un role et les permission associées
75: * @param type $name
76: * @return boolean
77: */
78: public function deleteRole($name)
79: {
80: $keyRole = array_search($name, $this->roles);
81: if($keyRole !== false)
82: {
83: unset($this->roles[$keyRole]);
84: unset($this->permissions[$name]);
85: return true;
86: }
87:
88: return false;
89: }
90:
91: /**
92: * Vérifie que la permission est autorisée
93: * @param string $permName Nom de la permission à tester
94: * @return boolean true si autorisé false sinon
95: */
96: public function hasPermission($permName)
97: {
98: foreach($this->roles as $role) {
99: if(isset($this->permissions[$role][$permName]) && $this->permissions[$role][$permName] == true)
100: return true;
101: }
102:
103: return false;
104: }
105:
106: /**
107: * Méthode magique pour sérialiser correctement les données
108: * @return array
109: */
110: public function __sleep()
111: {
112: return array('roles', 'permissions');
113: }
114: }
115:
116: ?>