Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-05-2010 21:28:39

hollow971
Membre
Date d'inscription: 29-07-2009
Messages: 19

Zend_Acl_Assert, vairable $privilege non renseigner

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é

Code:

<?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

Code:

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

 

#2 11-05-2010 09:19:02

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: Zend_Acl_Assert, vairable $privilege non renseigner

normal, tu l'as pas passé. Je te rapelle le prototype de isAllowed :

Code:

 public function isAllowed($role = null, $resource = null, $privilege = null)

C'est le 3eme paramètre, tu n'es as passé que 2 toi


----
Gruiiik !

Hors ligne

 

#3 11-05-2010 14:20:25

hollow971
Membre
Date d'inscription: 29-07-2009
Messages: 19

Re: Zend_Acl_Assert, vairable $privilege non renseigner

$auth->acl()->isAllowed($controller, $request->getParam('manage'))

Il provient de ma classe Model_Auth qui passe automatiquement le role de l'utilisateur..

Code:

        public function isAllowed($resource = null, $privilege = null)
        {
            return parent::isAllowed($this->auth->ROLE, $resource, $privilege);
        }

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