Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 29-06-2013 19:40:23

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Conseils pour l'authentification et ACL

Bonjour,
j'aurais besoin de quelques critiques sur la façon dont j'authentifie mes utilisateurs (si c'est correct ou pas et/ou si on peut mieux faire), et sur la "meilleure" façon de mettre en place les ACL. Je vois beaucoup de façons différentes pour mettre en place les ACL sur le net, mais la plupart commencent déjà à dater et elles sont vraiment différentes les unes des autres.

Donc pour l'authentification, j'ai un formulaire situé dans un ViewHelper (dans la sidebar de mon site). Lors de sa création je lui passe l'objet requête, la table user, l'adapter et un objet AuthenticationService grâce au service manager (je ne sais pas si c'est vraiment utile de mettre l'objet AuthenticationService dans le service manager vu que je ne l'utilise qu'une fois et que dans l'aide de vue).
Ensuite, je vérifie si l'utilisateur est connecté, si c'est le cas je n'affiche pas le formulaire de connexion.
Sinon je vérifie si le formulaire a été soumis. Si oui, je vérifie sa validité grâce à l'InputFilter. Si c'est valide, j'essaie d'authentifier l'utilisateur en passant un objet Zend\Authentication\Adapter\DbTable à l'objet AuthenticationService :

Code:

[lang=php]
$this->authService->setAdapter($authAdapter);
$result = $this->authService->authenticate();

Si c'est ok, je garde l'id de l'utilisateur :

Code:

[lang=php]
$storage = $this->authService->getStorage();
if(!$storage->isEmpty()) $storage->clear();
$storage->write($authAdapter->getResultRowObject('id'));

Pour ce qui est des ACL, j'ai vu que des modules existaient (comme BjyAuthorize), mais que ZF2 disposait déjà de librairies pour les ACL. Quels sont les avantages de chaque méthode ?
J'aimerai que les droits d'accès ne soit vérifié que si la ressource demandée existe dans les ACL (qu'on puisse aussi avoir une redirection spécifique selon la page demandée), sinon on laisse le router renvoyer l'erreur (si la ressource n'existe pas, page 404).
Pourrais-je faire quelque chose comme ça avec les librairies de base de ZF2 ?
Si je veux qu'un formulaire ne s'affiche sur une page que si l'utilisateur est connecté, je dois utiliser les ACL ? Ou vérifier dans le controller s'il est connecté ? (une partie de la page en plus si connecté, sinon la page normal, soit une même ressource)

Merci de bien vouloir m'éclairer !

Dernière modification par Seryus (05-08-2013 22:01:21)

Hors ligne

 

#2 01-07-2013 09:45:52

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Conseils pour l'authentification et ACL

Salut, je maitrise pas énormément les ACLs mais à priori tout ce que tu veux faire est possible via les librairies du ZF2. L'avantage d'un module comme ByjAuthorize par exemple est de fournir un environnement de travail prêt à fonctionner, il ne te reste plus qu'à le configurer donc c'est un gros gain de temps si tu maitrises pas trop cette partie.

Il y a aussi Rbac de Spiffy si je dis pas de bêtises qui est bien foutu par contre je sais pas s'il son module l'implémente déjà ou fourni juste les libs pour le faire.

Hors ligne

 

#3 02-07-2013 19:14:02

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Re: Conseils pour l'authentification et ACL

En effet j'ai réussi à faire ce que je voulais assez facilement en utilisant les librairies de ZF2. Mais du coup je ne comprends pas l'intérêt des modules externes. Je regarderai ça plus tard, pour l'instant j'ai eu de que je voulais, merci tongue

PS: Faudrait peut-être ajouter un bouton résolu au forum non ? big_smile

Hors ligne

 

#4 03-07-2013 09:46:32

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Conseils pour l'authentification et ACL

Seryus a écrit:

PS: Faudrait peut-être ajouter un bouton résolu au forum non ? big_smile

Il faudrait y ajouter plein de choses ^^. Un forum est en développement mais on a pas le temps en ce moment de bosser dessus :p.

Hors ligne

 

#5 03-07-2013 10:48:08

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Re: Conseils pour l'authentification et ACL

Ok bon courage à vous dans ce cas smile
Encore une petite question, j'ai vu que l'objet Http\Response avait une fonction isForbidden() qui retourne vrai ou faux si la route est autorisée par les ACL, comment utiliser cette fonction ?
Pour ma part, j'utilise ça pour le moment :

Code:

[lang=php]
if ($this->acl->hasResource($resource) && !$this->acl->isAllowed($role, $resource, $action))
{
    $e->getResponse()->setStatusCode(403);
}

Edit: Finalement cette méthode ne fait que comparer le statut de la réponse, mais je n'arrive pas à rediriger vers une page d'erreur 403 personnalisée. Changer seulement le statut n'y fait rien, par contre pour une erreur 404 ça fonctionne. Pourriez-vous m'indiquer la démarche à suivre ?

Dernière modification par Seryus (03-07-2013 11:34:10)

Hors ligne

 

#6 05-08-2013 22:00:51

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Re: Conseils pour l'authentification et ACL

Je viens de réaliser que mon système d'ACL ne sert à rien, le code

Code:

[lang=php]
$e->getResponse()->setStatusCode(404);

ne fait que changer l'entête de la requête et me redirige sur la vue 404. L'action est quand même exécutée.
Comment faire pour empêcher que ça arrive et rediriger correctement vers la page d'erreur ?

Hors ligne

 

#7 05-08-2013 22:42:09

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Conseils pour l'authentification et ACL

Rajoute un return ? smile

Hors ligne

 

#8 06-08-2013 01:06:21

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Re: Conseils pour l'authentification et ACL

Déjà essayé, ça n'a pas fonctionné. Je pense que je ne fais pas mes ACL au bon endroit. Voici ce que j'ai dans Module.php :

Code:

[lang=php]
public function onBootstrap(MvcEvent $e)
{
    $this->acl = new Acl(); // Une classe personnalisée qui étend Zend\etc\Acl
    $this->acl->setUp($this->getAclRules()); //Initialise les droits à partir d'un fichier de config
    $eventManager = $e->getApplication()->getEventManager();
    $eventManager->attach('route', array($this, 'allowedRoute')); //Fonction qui vérifie  si la route est autorisée
    $moduleRouteListener = new ModuleRouteListener();
    $moduleRouteListener->attach($eventManager);
}

Edit : En faite j'avais mis le return après la ligne, avec

Code:

[lang=php]
return $e->getResponse()->setStatusCode(403);

ça fonctionne, mais ça me renvoi une page blanche (sans layout ni message d'erreur).

Dernière modification par Seryus (06-08-2013 22:30:07)

Hors ligne

 

#9 24-08-2013 12:05:15

Seryus
Membre
Date d'inscription: 17-02-2012
Messages: 128

Re: Conseils pour l'authentification et ACL

Comment rediriger vers une route à partir ma fonction allowedRoute qui se trouve dans Module.php ? Il y a moyen de récupérer le plugin "redirect" à partir de l'objet MvcEvent ?

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages