Bonjour,
J'essaye de mettre en place les Acl, pour sécuriser mon application.
soit la classe suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?php class My_Classe_Acl extends Zend_Acl { private $_role ; public function __construct ($role) { $this->_role = $role; $this->ajouterRole(); } private function ajouterRole () { $this->addRole(new Zend_Acl_Role('inactif')); $this->addRole(new Zend_Acl_Role('annuaire')); $this->addRole(new Zend_Acl_Role('introduction'), 'annuaire'); $this->addRole(new Zend_Acl_Role('administration'), 'introduction'); $this->addRole(new Zend_Acl_Role('organisation'), 'administration'); $this->allow('inactif', null, 'stop'); $this->allow('annuaire', NULL, 'annuaire'); $this->allow('introduction', NULL, array( 'annuaire' , 'introduction' )); $this->allow('administration', NULL, array( 'annuaire' , 'introduction' , 'administration' )); $this->allow('organisation'); } public function acces($access) { return $this->isAllowed($this->_role,NULL,$access); } }
Dans ma base de données, chaque utilisateur à un rôle.
Donc un fois que l'utilisateur se connecte via Auth, j'instancie cette classe et je la met en session
My_Session est donc une classe qui gére la session.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 My_Session::setData('Acl',new My_Classe_Acl(Zend_Auth::getInstance()-> getIdentity() -> log_acl));
je fais donc appel à ses méthodes de cette façon
J'obtient exactement le résultat voulu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 if (! My_Session::getData('Acl')->acces('administration')) { $this->_redirect('/error/redirect'); }
Mais dans la doc Zend on parle plutôt de sérialiser le méthode, et là je n'y arrive pas.
Voyer vous, une erreur conceptuelle dans ma façon de faire.
Merci de votre aide.
MaitrePylos
Partager