Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-04-2014 12:43:12

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Explication du module ZfcRbac

Bonjour,
Je suis en train de travailler sur le module zfcRbac j'ai parcouru longuement la doc sur github.
Mais étant débutant sur zf2, et qui plus est en autoformation dessus, y a quelques points noirs que je n'arrive pas a résoudre. Un peu d'aide serait donc bénéfique pour évoluer un peu :p

Précisions : j'utilise désormais ZfcUser / ZfcUserDoctrineORM / ZfcAdmin / DoctrineModule / DoctrineORMModule / ZfcBase

Tout d'abord par rapport à mon projet, j'ai besoin de faire des ACl hierarchique avec donc plusieurs roles pour un utilisateur et plusieurs permissions pour chaque rôles et les rôles sont donc décrit en BDD, donc je dois utiliser une Entité(comme celle de la doc) Permission/HierarchicalRole. Ce que j'ai fait. Mon mapping est ok.
J'ai donné comme identity provider celle par défaut. Ais-je bien fait ? (par rapport aux modules que j'utilise)

Je n'ai pas fait cette étape :

Code:

return [
    'service_manager' => [
        'factories' => [
            'Zend\Authentication\AuthenticationService' => function($sm) {
                // Create your authentication service!
            }
        ]
    ]
];

Puisque j'ai zfcUser j'ai donc juste mis l'alias ('Zend\Authentication\AuthenticationService' => 'zfcuser_auth_service'), est-ce que c'est ce qu'il faut faire ou me suis-je gouré ??

Un de mes problèmes est que je n'arrive pas lors du mapping a faire une jointure entre mon entité User, et la table des rôles...Et j'ai comme l'impression que c'est parce que ma config est pas bonne. Mais je n'en suis pas sûr.

D'autre part, avec le schéma qui est créée en base de donnée, j'ai 5 tables, avec plusieurs contraintes.
J'ai compris que la table rôle accorde plusieurs permission et la concordance se fait dans la table hierarchicalrole_permission,
J'ai compris qu'un role possède un parent dans sa propre table mais je ne comprend pas pourquoi la table  hierarchicalrole_hierarchicalrole existe elle liste quoi exactement ?

Est-ce que quelqu'un peut m'expliquer la démarche d'insert d'un rôle avec toutes les dépendance qui vont bien s'il vous plait ?

Merci par avance pour votre temps.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#2 08-04-2014 14:19:14

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

Re: Explication du module ZfcRbac

Salut, je n'utilise plus ZfcUser donc je saurais t'aider dessus.

Donc pour revenir à l'étape que tu n'as pas fait c'est pas grave tant que l'entité que te retourne l'AuthenticationService implémente l'interface ZfcRbac\Identity\IdentityInterface. Et dans le cookbook c'est indiqué quoi faire : https://github.com/ZF-Commons/zfc-rbac/ … nd-zfcuser

Normalement si tu as bien utilisé l'entité fournie dans la doc ça devrait être bon, il faut que tu fasses attention au chargement des rôles et permissions car si tu en as beaucoup ça peut générer beaucoup de requêtes supplémentaires.

Pour résumer le module, tu as 2 choses qui sont proposées
- Les guard
- L'AuthorizationService
Les guard sont là pour bloquer les routes et/ou les actions des tes contrôleurs en fonction du rôle de l'utilisateur (en général un rôle c'est admin, modérateur, membre, invite etc ...) tandis que l'authorizationService est là pour tester les permissions associées à un rôle. Dans un cas simple on pourrait avoir la permission 'membre.profil.show' qui permettrait à l'utilisateur de consulter son profil. Dans le cas hiérarchique le rôle modérateur est parent du rôle membre (tu peux pas être modérateur si t'es pas membre) donc lui aussi bénéficie de cette permission mais en possède généralement d'autres. Donc il faut être vigilant avec ça pour éviter d'avoir de la redondance de permissions en fonction des rôles enfants.

La table hierarchicalrole_hierarchicalrole est la table de hiérarchie entre les rôles on peut imaginer les rôles suivant :
- Membre
- Modérateur
- Contributeur
- Administrateur
- Super-Administrateur

Membre va être le rôle tout en bas de l'échelle.
Modérateur va avoir comme rôle fils Membre
Contributeur va avoir comme rôle fils Membre (mais pas Modérateur)
Administrateur va avoir pour rôle fils Modérateur (mais pas Contributeur parce qu'on a décidé que c'était comme ça ^^)
Super-Administrateur a tout les rôles mais pour être logique on va pas lui demander d'avoir tous les rôles directement comme fils mais seulement 2 : Administrateur et Contributeur, de cette façon il a tout les rôles et toutes les permissions
Cette table sert donc à ça car un rôle peut hériter de plusieurs rôles il faut donc une ManyToMany

Concernant ton soucis ça doit venir de ton mapping doctrine smile.

Hors ligne

 

#3 08-04-2014 14:29:52

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Explication du module ZfcRbac

Merci Orkin pour ta réponse,

C'est pas encore limpide pour moi mais tu m'a donné des pistes à creuser et c'est déjà bien !! Merci !


Pour mon mapping doctrine, je vais creuser mais pourtant j'ai bien fait gaffe à faire un truc carré.... je reviens vers toi si je bloque :p

et pour cela,

Est-ce que quelqu'un peut m'expliquer la démarche d'insert d'un rôle avec toutes les dépendance qui vont bien s'il vous plait ?

Aurait tu une indication s'il te plait ?

Merci beaucoup pour ta réponse.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#4 08-04-2014 14:36:04

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

Re: Explication du module ZfcRbac

Je te l'ai expliqué ... Tu as la table de rôle qui contient tes rôles, la table hierarchicalrole_hierarchicalrole qui contient la hiérarchie entre les rôles et la table permission qui contient les permissions en fonction des rôles. Je vois pas ce que je peux te dire de plus.

Ensuite tu as une table membres_roles qui associe un membre à un ou plusieurs rôles.

Hors ligne

 

#5 08-04-2014 16:23:04

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Explication du module ZfcRbac

je n'utilise plus ZfcUser donc je saurais t'aider dessus.

Qu'utilises tu ? si tu utilise quelque chose à la place.

Et sinon oui tu me l'avais expliqué, mais j'ai comme l'impression d'avoir trop de table pour pas grand chose en fait, j'ai vu certains projets qui utilise 3 tables roles, user et user_role_linker (come pour bjy authorize en fait) mais en utilisant zfcrbac.
Mon mapping actuel en ayant suivit la doc me génère :
`hierarchicalrole_hierarchicalrole`
`hierarchicalrole_permission`
`permissions`
`role`
`user`
`user_role_linker` <= je viens de régler le problème pour la générer.

J'ai bien vu sur github qu'il y avait des modules pour intégrer facilement, et sans se poser de question zfcrbac avec zfcUser et doctrine mais cela ne m'intéresse pas j'aimerai comprendre ce que je fais c'est tout :p

C'est au niveau de la mise en pratique que j'ai du mal en fait.

Dernière modification par JGreco (08-04-2014 16:38:17)


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#6 08-04-2014 16:39:35

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

Re: Explication du module ZfcRbac

J'utilise un module que j'ai fait moi même de gestion utilisateur et qui utilise aussi ZfcRbac avec ajout de rôles, permissions etc ... Ca m'évite d'être dépendant d'un module comme ZfcUser

Il faut que tu rajoutes une jointure pour le rôle sur l'entité qui implémente IdentityInterface vers la table rôle en ManyToMany ou ManyToOne suivant ce que tu veux faire. Normalement l'interface t'imposes une methode getRoles donc il te faut l'attribut avec le mapping qui va bien.

Hors ligne

 

#7 09-04-2014 12:47:04

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Explication du module ZfcRbac

Bonjour,
Alors j'ai un peu avancé dans la compréhension de ce module, j'ai commencé à tester avec quelques permission, utilisateurs et rôle.

Toutefois j'ai pas encore compris certains aspects du fonctionnement de ce module :

Premièrement, sachant que j'utilise les permissions dans la base de donnée, je dois quand même utiliser les quards non ?
J'ai déjà fait cela :

Code:

[lang=php]
'guards' => [
            'ZfcRbac\Guard\RouteGuard' => [
                'login'    => ['*'],
                'backend*' => ['admin'],
                'user'    => ['UnRoleDansBDD'] <- ne marche pas
            ]
         ],

Mais ça ne marche pas, vu que j'ai mis

Code:

'protection_policy' => GuardInterface::POLICY_DENY,

La page m'es refusé bien que l'utilisateur ait le bon rôle.


Deuxièmement,

Je souhaite utiliser les factories pour injecter zfcRbac\Service\AuthorizationService, j'arrive bien à récupérer l'instance dans le ServiceManager de mon indexController :

Code:

[lang=php]
$authService = $this->getServiceLocator()->get('ZfcRbac\Service\AuthorizationService'); //renvoi bien une instance

la fonction get_class_method me donne ceci sur $authService :

Code:

array (size=6)
  0 => string '__construct' (length=11)
  1 => string 'setAssertion' (length=12)
  2 => string 'setAssertions' (length=13)
  3 => string 'hasAssertion' (length=12)
  4 => string 'getIdentity' (length=11)
  5 => string 'isGranted' (length=9)

Partant de ce postulat,

Code:

[lang=php]
class Module
{
    // getAutoloaderConfig(), etc...

    public function getServiceConfig()
    {
        return [
            'factories' => [
                 'MyService' => function($sm) {
                     $authService = $sm->get('ZfcRbac\Service\AuthorizationService')
                     return new MyService($authService);
                 }
            ]
        ];
    }
}

A quoi sert ce code ? que doit faire le service MyService ?

Merci pour votre temps.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#8 09-04-2014 14:18:10

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

Re: Explication du module ZfcRbac

Pour ton premier soucis faut que tu creuses un peu. Télécharges ZendDeveloperTools et regardes ce que tu as comme rôle pour voir si ça vient pas de là déjà wink.

Je comprend pas à quoi te sert le get_class_method mais pas bien grave. Je pense que tu veux voir compliqué où c'est simple. Là ce que fait la factory c'est récupérer AuthorizationService de ZfcRbac et créer un service qui là s'appelle MyService et lui passe AuthorizationService pour pouvoir l'utiliser dedans. Ensuite ça te retourne une instance de MyService.

Hors ligne

 

#9 09-04-2014 14:46:06

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Explication du module ZfcRbac

get class method me sert a comprendre exactement la nature des objets que je traite sachant que je nage en plein inconnu... je découvre comme tu le sais ZF2 et j'essaye de sortir la tête de l'eau comme je peux pour comprendre.
Ce qui te parait simple est encore beaucoup trop abstrait pour moi, j'espère que d'ici quelques mois je rigolerai quand je relirais ces lignes mais pour l'instant....bref..


Pour mon premier soucis j'ai déjà zftools. les rôles sont les bons mais mon utilisateur est bloqué de partout bien que mes guard sont censés leur donner le droit d'accéder à la ressource.
D'autre part, je pensais que ça pourrai venir d'un oubli de config au niveau du role provider, la méthode getRoles doit être implémenté dans ma classe HierarchicalRole non(c'est pas le cas actuellement) ?

Ok pour authorizationService, l'utiliser au sein de la classe MyService, faut comprendre que dans MyService c'est ici que je ferais mes isGranted ?


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#10 09-04-2014 14:48:20

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

Re: Explication du module ZfcRbac

Tu peux directement aller voir la classe aussi big_smile.

Là je peux pas tester ton code donc faut que tu cherches un peu :p.

Ca dépend de ton usage mais oui tu peux protéger les actions des tes services à ce niveau.

Hors ligne

 

#11 09-04-2014 16:25:13

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Explication du module ZfcRbac

Merci j'ai réglé tous mes soucis pour l'instant, ça fait plaisir quand on comprends mieux !

Une autre question par contre, avec zfc rbac, comment on fait pour afficher ou non un menu selon les acl ? par exemple ne plus afficher login du menu (et meme le 'desactiver' quand on es loggé).
Ou inversement ne pas afficher la page profil alors qu'on es pas loggé mais l'afficher une fois que c'est le cas.
Je suppose que c'est en récupérant les permissions depuis l'AuthorizationService ?

Dernière modification par JGreco (09-04-2014 16:31:16)


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#12 09-04-2014 16:48:23

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

Re: Explication du module ZfcRbac

Oui tu as un helper pour ça. isGranted('nomdelapermission') et identity() pour l'utilisateur connecté.

Hors ligne

 

#13 11-04-2014 15:18:29

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Explication du module ZfcRbac

Bonjour,

J'ai donc changé d'approche, grâce à Bakura me conseillant de me mettre sur Spiffy-navigation afin de mettre des menus selon les droits.

Toutefois, j'ai remarqué que ma clé 'role' et 'permission' n'était pas pris en compte et donc que les droits ne sont pas chargés. Je pense, après avoir lu et compris un peu le code du module, que c'est parce que le listeners n'est pas instancié..

actuellement j'ai mis cela et j'ai une erreur d'instanciation (logique je ne l'instancie pas)

Code:

[lang=php]
        'listeners'=> array('SpiffyNavigation\Listener\RbacListener' => 'Zend\Permissions\Rbac\Rbac' ),

j'ai l'erreur suivante :

Code:

Catchable fatal error: Argument 1 passed to Zend\EventManager\EventManager::attachAggregate() must implement interface Zend\EventManager\ListenerAggregateInterface, instance of Zend\Permissions\Rbac\Rbac given

quel est l'implémentation correcte pour instancier un listener s'il vous plait ?

Dernière modification par JGreco (11-04-2014 16:21:21)


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#14 15-04-2014 09:40:25

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Explication du module ZfcRbac

Bonjour,
Bon j'ai avancé un peu mais ce n'est toujours pas la panacée. J'y arrive cependant je sens que je suis proche du but j'ai juste besoin d'un petit coup de pouce et je pourrai je crois enfin clore ce sujet.

Voici finalement mon listener :

Code:

[lang=php]
'listeners'=> array(new \SpiffyNavigation\Listener\RbacListener(new \Zend\Permissions\Rbac\Rbac)), // <--il faut changer un truc ici ?

Spiffy navigation permet grâce à un listener de n'afficher sur la barre de navigation que les liens dont le rôle user à accès. Toutefois, le module doit prendre une instance de Zend\Permission\rbac\rbac, ce qui ne colle pas avec le module zfcRbac si ? J'ai pu remarquer que l'objet n'avais aucune donnée une fois instancié, et donc le menu n'affiche rien.

Le module zfcRbac fournit-il un objet de type Zend\Permission\Rbac\Rbac que l'on peut donner a spiffy pour qu'il marche ?

Merci d'avance pour votre temps.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#15 15-04-2014 10:15:07

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

Re: Explication du module ZfcRbac

Salut, ajouter ton listener de cette façon n'est pas conseillé. Là pour le coup il vaut mieux te créer une factory comme ça tu ne fais pas d'instanciation de classe directement dans ton fichier de config (c'est pratique pour la mise en cache). Concernant ton objet c'est normal qu'en faisant un new Zend\Permissions\Rbac\Rbac qu'il soit vide tu lui passes rien comme infos il va pas se remplir tout seul wink

Pour ton instance Rbac tu peux le récupérer depuis le Service Locator via 'Rbac\Rbac' par contre ce n'est pas le même que celui du ZF2, c'est le composant Rbac du ZF3 (ou du moins il s'en rapproche) donc t'auras surement des modifications à faire côté SpiffyNavigation pour que ça fonctionne hmm. Si Bakura t'a dit que ça fonctionnait c'est que ça doit fonctionner mais peut être pas sans adaptation.

Tu peux essayer en changeant la classe attendue par le module SpiffyNavigation ça se trouve ça suffira il est fort probable que les interfaces aient les mêmes méthodes.

Hors ligne

 

#16 15-04-2014 10:23:13

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Explication du module ZfcRbac

Bon,

Je vais y arriver !! faut espérer ! pour ce que tu me dit, créer une factory, c'est l'instancier par exemple dans mon module.php ?

Si je rajoute cela dans module.php çe serait correct ?

Code:

[lang=php]
                'SpiffyNavRbacFactory'                  => function(\Zend\ServiceManager\ServiceLocatorInterface $sl) {
                    return new \SpiffyNavigation\Listener\RbacListener($sl->get('Rbac\Rbac'))
                },

Pour faire comprendre a spiffy que je dois utiliser cette factorie je lui met quoi dans la partie 'listener' ?

Je vais voir du coté de https://github.com/spiffyjr/spiffy-navi … stener.php
ce que je dois changer pour adapter cela. J'espère qu'il n'y as que dans ce fichier que je devrait changer le truc.

Merci pour ta réponse !!

Edit : j'ai modifié dans le fichier de spiffy :

Code:

use Rbac\Rbac;
//au lieu de 
use Zend\Permissions\Rbac\Rbac;

Et dans mon listener j'ai mis

Code:

'listeners'=> array('SpiffyNavRbacFactory'=>'SpiffyNavRbacFactory'),

Mais cela ne marche pas.

j'ai cette erreur :

Code:

Fatal error: Call to undefined method Rbac\Rbac::hasRole() in C:\wamp\www\mon projet\vendor\spiffy\spiffy-navigation\src\SpiffyNavigation\Listener\RbacListener.php on line 4

les méthodes ne sont pas les mêmes :s
Enfin......... si seulement que ZfcRbac ne fait pas de check sur les roles, uniquement sur les permissions. Je vais tester de modifier dans ce sens.

Dernière modification par JGreco (15-04-2014 10:49:01)


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#17 15-04-2014 10:58:08

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

Re: Explication du module ZfcRbac

Tu verras bien s'il faut changer ailleurs ça te le dira wink.

Non ça ça revient au même, c'est une fonction anonyme et c'est pas super propre. Tu créer une classe factory qui te retourne une instance de SpiffyNavigation\Navigation\Listener\RbacListener et tu fais un truc du genre :

Code:

[lang=php]
public function onBootstrap(EventInterface $event)
    {
        /* @var $application \Zend\Mvc\Application */
        $application         = $event->getTarget();
        /** @var $serviceManager ServiceManager */
        $serviceManager      = $application->getServiceManager();
        $eventManager        = $application->getEventManager();
        $moduleRouteListener = new ModuleRouteListener();
        $moduleRouteListener->attach($eventManager);

        $eventManager->attach($serviceManager->get('SpiffyNavigation\Listener\RbacListener')); // où SpiffyNavigation\Listener\RbacListener représente le nom de ta fabrique
    }

Hors ligne

 

#18 15-04-2014 11:32:51

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Explication du module ZfcRbac

Merci encore pour tes indications,

J'ai crée ma première factory !! Rien de bien compliqué :

Code:

[lang=php]
namespace Application\Factory;

use SpiffyNavigation\Listener\RbacListener;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

class RbacSpiffyFactory implements FactoryInterface {

    /**
     * Creates the Navigation service.
     *
     * @param \Zend\ServiceManager\ServiceLocatorInterface $serviceLocator
     * @return Navigation
     */
    public function createService(ServiceLocatorInterface $serviceLocator)
    {
        //on récupère le service Rbac\Rbac de zfcRbac module
        $rbacModule = $serviceLocator->get('Rbac\Rbac');
        return new \SpiffyNavigation\Listener\RbacListener($rbacModule);
    }
}

Mais j'ai deux erreurs la première :

méthode hasRole non définie donc j'ai commenté cette partie.

Ensuite :

Code:

 Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Passed variable is not an array or object, using empty array instead' in C:\wamp\www\monProjet\vendor\zfr\rbac\src\Rbac\Traversal\RecursiveRoleIterator.php on line 31

Donc je passe une chaine de caractère en fait le role et la permission, donné dans la config. Comment je peux corriger cela un idée ?


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#19 15-04-2014 12:02:56

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

Re: Explication du module ZfcRbac

Tu peux virer le namespace devant RbacListener dans ton new, tu as un import en haut donc ça sert à rien.

Le but c'est pas que tu commentes ce qui n'existe plus ... C'est que tu adaptes pour que la classe Rbac que tu lui passes fonctionne avec celle qu'il attend donc là c'est à toi de chercher. Je connais pas le module SpiffyNavigation donc là faut que tu cherches.

Hors ligne

 

#20 11-05-2015 18:23:27

shishi
Membre
Date d'inscription: 17-03-2013
Messages: 67

Re: Explication du module ZfcRbac

Bonjour,
je me permet de remonter le sujet, car ayant pas mal cherché la façon d'utiliser le RbacListener du module SpiffyNavigation.

voici ma solution :

tout d'abord je créé une fabrique pour instancier le RbacListener :

Code:

[lang=php]<?php
namespace ShishiUser\Factory\Listener;

use Zend\ServiceManager\FactoryInterface;
use Zend\Permissions\Rbac\Rbac;
use SpiffyNavigation\Listener\RbacListener;

class RbacListenerFactory implements FactoryInterface
{

    /*
     * (non-PHPdoc)
     * @see \Zend\ServiceManager\FactoryInterface::createService()
     */
    public function createService(\Zend\ServiceManager\ServiceLocatorInterface $serviceLocator)
    {
        // TODO Auto-generated method stub
        // la Zend\Permission\Rbac\Rbac a fournir au constructeur du listener
        $rbac = new Rbac();
        
        // Ici on récupère le rôle connecté(soit le rôle de l'utilisateur ou le rôle 'Visiteur'
        $identityRoles = $serviceLocator->get('ZfcRbac\Service\RoleService')->getIdentityRoles()[0];
        $roleName = $identityRoles->getName();
        
        // On récupère le rôle depuis la base de donnée (ainsi que les rôles fils et les permissions associées a chaques rôles
        $roleRepository = $serviceLocator->get('shishi-user-role-repository');
        $role = $roleRepository->findByLibelles([
            $roleName
        ])->current();
        
        //On ajoute les rôles ainsi que les permissions a $rbac
        $rbac->addRole($role->getRol_libelle());
        if ($role->getRol_permissions() !== null) {
            foreach ($role->getRol_permissions() as $permission) {
                $rbac->getRole($role->getRol_libelle())
                    ->addPermission($permission->getPerm_libelle());
            }
        }
        if ($role->getChilds() !== null) {
            $rbac = $this->setChild($rbac, $role->getRol_libelle(), $role->getChilds());
        }
        return new RbacListener($rbac);
    }

    private function setChild(Rbac $rbac, $roleParentName, $childs)
    {
        foreach ($childs as $child) {
            $rbac->getRole($roleParentName)->addChild($child->getRol_libelle());
            if ($child->getRol_permissions() !== null) {
                foreach ($child->getRol_permissions() as $permission) {
                    $rbac->getRole($child->getRol_libelle())
                        ->addPermission($permission->getPerm_libelle());
                }
            }
            if ($child->getChilds() !== null) {
                $rbac = $this->setChild($rbac, $child->getRol_libelle(), $child->getChilds());
            }
        }
        return $rbac;
    }
}

?>

ensuite dans mon module.config.php :

Code:

[lang=php]'service_manager' => [
        'factories' => [
            'shishi-user-rbac-listener'   =>  'ShishiUser\Factory\Listener\RbacListenerFactory', 
        ], 
],

et enfin dans un fichier spiffy_navigation.global.php :

Code:

[lang=php]<?php
/**
 * SpiffyNavigation Configuration
 *
 * If you have a ./config/autoload/ directory set up for your project, you can
 * drop this config file in it and change the values as you wish.
 */
$settings = [
    'listeners' =>  ['shishi-user-rbac-listener'], 
];

/**
 * You do not need to edit below this line
 */
return [
    'spiffy_navigation' => $settings
];

Voila il ne reste plus qu'a configurer les options dans les pages :

Code:

[lang=php]<?php
return [
    'containers' => [
        'shishi-user' => [
            [
                'pages' => [
                    [
                        'attributes' => [
                            'name' => 'shishi-user-login'
                        ],
                        'options' => [
                            'label' => 'Connexion',
                            'route' => 'shishi-user/login', 
                        ],
                        'pages' => []
                    ] ,
                    [
                        'attributes' => [
                            'name' => 'shishi-user-register', 
                        ],
                        'options' => [
                            'label' => 'Inscription',
                            'route' => 'shishi-user/register', 
                        ],
                        'pages' => []
                    ], 
                    [
                        'attributes' => [
                            'name' => 'shishi-user-delete', 
                        ],
                        'options' => [
                            'label' => 'Supprimer',
                            'route' => 'shishi-user/delete', 
                            'role'  =>  'Administrateur', 
                            'permission'  => 'Delete', 
                        ],
                        'pages' => []
                    ], 
                ], 
            ],
        ],
    ]
];

J'espère que ce retour en aidera certains, n'hésitez pas a me faire part de vos commentaires ou remarque concernant mon code

Hors ligne

 

#21 11-05-2015 18:26:39

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

Re: Explication du module ZfcRbac

Hello, merci pour ton retour par contre on parle pas du même module Rbac wink

Hors ligne

 

#22 11-05-2015 18:28:50

shishi
Membre
Date d'inscription: 17-03-2013
Messages: 67

Re: Explication du module ZfcRbac

Ah oups décidément moi et les versions ça fait 2 voir plus sad

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