J'ai mis en place un système d'identification d'utilisateurs en suivant le tuto :
http://r-benyacoub.developpez.com/tu...ork/zend-auth/

Maintenant j'essaie de gérer des droits, donc je m'interresse à Zend_Acl.
Les informations que l'on trouve sur le net concernant l'utilisation de Zend_Acl m'embrouillent un peu car souvent ce sont des méthode différentes qui sont utilisées.
Du coup je viens la pour exposer ma situation, si ça parle à quelqu'un qui pourrait m'expliquer et me permettre d'avancer...
Sur le site web, il faut dans tous les cas être identifié pour accéder a n'importe quelle page excepté la page de login.
J'ai donc mis en place comme expliqué dans le tuto Zend_Auth cité plus haut :
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
class AuthController extends Zend_Controller_Action 
{
    function init()
    {
        $this->initView();
        $this->view->baseUrl = $this->_request->getBaseUrl();
    }
    function indexAction()
    {
        $this->_redirect('/');
    }
    function loginAction()
    {
        $this->view->message = '';
        if($this->_request->isPost()){
            Zend_Loader::loadClass('Zend_Filter_StripTags');
            $filtre = new Zend_Filter_StripTags();
            echo $this->_request->getPost('username');
            $username = $filtre->filter($this->_request->getPost('username'));
            $password = $filtre->filter($this->_request->getPost('password'));
 
            if (empty($username)){
                $this->view->message = "Nom d'utilisateur obligatoire";
            }else{
                Zend_Loader::loadClass('Zend_Auth_Adapter_DbTable');
                $db = Zend_registry::get('db');
                $authAdapter = new Zend_Auth_Adapter_DbTable($db);
                $authAdapter->setTableName('utilisateur');
                $authAdapter->setIdentityColumn('nom');
                $authAdapter->setCredentialColumn('motdepasse');
 
                $authAdapter->setIdentity($username);
                $authAdapter->setCredential($password);
 
                $auth = Zend_Auth::getInstance();
                $result = $auth->authenticate($authAdapter);
 
                if ($result->isValid()){
                    $data = $authAdapter->getResultRowObject(null,'motdepasse');
                    $auth->getStorage()->write($data);
                    $this->_redirect('/');
                }else{
                    $this->view->message = 'L\'identification a échouée';
                }
            }
        }
        $this->view->title = "Authentification";
        $this->render();
    }
    function logoutAction()
    {
        Zend_Auth::getInstance()->clearIdentity();
        $this->_redirect('/');
    }
}
?>
Et puis dans mon IndexController, j'ai rajouté :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
function preDispatch()
     {
         $auth = Zend_Auth::getInstance();
         if(!$auth->hasIdentity()){
             $this->_redirect('auth/login');
         }
     }
Ca, ca marche, il faut etre un utilisateur existant dans la base de donnée pour accèder au site.
Maintenant, si j'essaie de gérer les droits :
Je me suis inspiré de code trouvé sur le net, j'ai rajouté dans mon bootstrap
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
//-------------------------------------------------------------
// creer le moteur d'ACL
Zend_Loader::loadClass("Zend_Acl");
Zend_Loader::loadClass("Zend_Acl_Role");
Zend_Loader::loadClass("Zend_Acl_Resource"); 
 
$acl = new Zend_Acl();
// menu utilisateur---
$acl->add(new Zend_Acl_Resource('Accueil'));
$acl->add(new Zend_Acl_Resource('Dossier'));
$acl->add(new Zend_Acl_Resource('Compte'));
 
// menu administrateur---
$acl->add(new Zend_Acl_Resource('GestionUtilisateur'));
 
$acl->addRole(new Zend_Acl_Role('utilisateur'));
$acl->addRole(new Zend_Acl_Role('administrateur'),'utilisateur');
 
 
$acl->allow('utilisateur', 'Accueil');
$acl->allow('utilisateur', 'Dossier');
$acl->allow('utilisateur', 'Compte');
 
$acl->allow('administrateur', 'GestionUtilisateur');
 
 
Zend_Registry::set("ACL",$acl);
//-------------------------------------------------------------
Donc :
- Je définie mes ressources
- Je définie mes rôles : utilisateur, administrateur (qui hérite de utilisateur)
- Je stocke ces infos dans le registre

Maintenant, quelques questions pour personnes qui ont déjà utilisé Acl :

1) Comment je fais pour savoir si quelqu'un est utilisateur ou gestionnaire ? Je stocke un code dans la table des utilisateurs et je le recupère en même temps que l'authentification ? ensuite un fois que j'ai son rôle je rajoute du code dans le predispatch afin de confirmer un accés ou non à une ressources ? (des exemple de code seraient les bienvenues)

2) La, je ne gère que 2 rôles utilisateur et gestionnaire. Imaginons que je veuille gérer les accès plus finement et que chaque utilisateur ait des droits spécifiques(un programme de gestion permettrait de les gérer) : Est il conseillé de stocker un profil par utilisateur, ou bien c'est trop lourd à gérer et il vaut mieux définir 4/5 profils d'utilisateur qui conviendrons en gros à tous les utilisateurs ?