Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour, pour la gestion des droits utilisateurs, j'avoue que la je suis dépassé ( au bord d'une crise même)
Pour la gestion de mes ACL, je considère que chaque utilisateur appartient à un groupe d'utilisateur (ADMIN, MEMBRE etc....) ce qui reviens aux "rôle", que c'est utilisateur on accès a un certain nombre de ressource ( news, dossier etc...) "ressource".
La ou sa se corse, c'est que je considère que si on a le droit de créer un article, il est logique de pouvoir le modifier, donc la partie privilège ne représente que l'ID de la publication...
sachant que dans l'administration, les url se découpe de la manière suivante :
'module'=>administration
'controller' => $ressource
'action' => quelconque puisque comme je l'ai dit au par avant, sa ne m'intéresse pas de savoir ce qu'il fait.. en tout cas "une personne" et non "un groupe"
manage' => id de la publication
J'ai donc mis en place un plugin permettant de récupérer ces info et de demander si l'accès est autorisé
<?php class Plugin_Acl extends Zend_Controller_Plugin_Abstract { public function preDispatch(Zend_Controller_Request_Abstract $request) { $auth = Model_Auth::getInstance(); $controller = $request->getControllerName(); $module = $request->getModuleName(); if($module === 'administration' AND $controller !== 'index' AND $controller !== 'error' ) { if(!$auth->hasIdentity()) { $request->setActionName('index') ->setControllerName('index') ->setModuleName('administration'); } elseif(!$auth->acl()->isAllowed($controller, $request->getParam('manage'))) // cette partie nous intéresse !! { $request->setActionName('index') ->setControllerName('index') ->setModuleName('administration'); } } } }
En revanche, ce qui m'intéresse, c'est de savoir si la personne édite/supprime une publication qui lui appartient ou pas
j'ai donc mis en place :
//!$auth->acl()->isAllowed($controller, $request->getParam('manage'))
Sachant que isAllowed pointe sur la bonne ressource et le bon role ...
Pour commencer mes vérifications, j'ai du réaliser une classe assertion
class Assertion_Publication implements Zend_Acl_Assert_Interface { public function assert(Zend_Acl $acl, Zend_Acl_Role_Interface $role = null, Zend_Acl_Resource_Interface $resource = null, $privilege = null) { if($privilege !== null) { switch($resource->getResourceId()) { case 'NEWS': $dbNews = new Model_DbTable_News(); $news = $dbNews->get($privilege); return ($news->AUTHID == Model_Auth::getInstance()->AUTHID); break; case 'DOSSIER': $dbDossier = new Model_DbTable_News(); $dossier = $dbDossier->get($privilege); return ($dossier->AUTHID == Model_Auth::getInstance()->AUTHID); break; default: return false; break; } } return true; } }
Le probleme est que la variable $privilege renvois NULL alors que toute les autres sont renseigné....
c'est a ne rien y comprendre, alors si vous pouviez m'aidé a résoudre mon problème je vous en serait vraiment reconnaissant :s
Cordialement
Hollow971
Hors ligne
normal, tu l'as pas passé. Je te rapelle le prototype de isAllowed :
public function isAllowed($role = null, $resource = null, $privilege = null)
C'est le 3eme paramètre, tu n'es as passé que 2 toi
Hors ligne
$auth->acl()->isAllowed($controller, $request->getParam('manage'))
Il provient de ma classe Model_Auth qui passe automatiquement le role de l'utilisateur..
public function isAllowed($resource = null, $privilege = null) { return parent::isAllowed($this->auth->ROLE, $resource, $privilege); }
Hors ligne
Pages: 1