Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Acl & Zend_Auth
Zend_Acl & Zend_Auth Forum d'entraide pour les composants Zend_Acl & Zend_Auth du Zend Framework (contrôle d'accès, gestion des droits, authentification, etc.). Avant de poster -> Cours Zend_Acl et Zend_Auth.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/02/2008, 10h30   #1
Invité de passage
 
Inscription : janvier 2008
Messages : 14
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 14
Points : 3
Points : 3
Par défaut [Zend_Acl] Acl Auth fonctionnement général

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 :
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 :
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 :
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 ?
bertra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/02/2008, 15h40   #2
Invité régulier
 
Inscription : septembre 2004
Messages : 16
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 16
Points : 6
Points : 6
Pour 2) :
Moi, j'ai des groupes (Administrateur, gestionnaire, ...) mais chaque utilisateur appartient aussi à son propre groupe : L'utilisateur 'Toto' appartient lui et lui seul au group 'Toto'.
Ainsi, je peux gérer les droits par utilisateur mais aussi par groupes.
norky est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h18.


 
 
 
 
Partenaires

Hébergement Web