Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Je découvre ZF2
je bute sur les doits depuis plusieurs jours j'ai tester plusieurs tuto tel que :
http://php-underground.blogspot.com/201 … t-acl.html
http://samminds.com/2013/03/zfcuser-bjy … -together/
....
je parviens bien a m'identifier, je peux voir dans zend tools le role
en revanche quand j'active dans config/autoload/bjyauthorize.global.php
... 'guards' => array( 'BjyAuthorize\Guard\Controller' => array( ... ), 'BjyAuthorize\Guard\Route' => array( ... ), ), ...
j'ai tenté un l'un puis l'autre un mixe des deux mais sans succès
exemple
j'ai une liste d'entreprise
Entreprises\Controller\Entreprises
je voudrais donner accès a la liste d'entreprise au user et guest
mais les actions add, active... je voudrait les limité a admin
edit, active, desactive serait accecible à admin et owner
si je passe par
array('controller' => 'Entreprises\Controller\Entreprises', 'action'=>'index', 'roles' => array('guest', 'user','admin')),
je ne peux pas accéder à index
mais si je fais
array('controller' => 'Entreprises\Controller\Entreprises', 'action'=>'add', 'roles' => array('admin')),
ça fonctionne pour admin
si j'ajoute par contre
array('route' => 'entreprises', 'roles' => array('guest')),
là j'ai accès a toute les actions dans n'importe quel role j'ai tenter d'ajouter
array('route' => 'entreprises/add', 'roles' => array('admin')), mais n'importe qui peut accédé a l'action
je ne sais vraiment plus comment aborder le problème
merci pour votre aide
Hors ligne
Bonjour,
existe-t-il ? un couple de module simple et je dis bien simple qui fonctionne.
je pense les avoir tous testé j'ai pour chaque module tester une erreur qui apparaitra à un moment ou un autre ... c'est a ce demander si les contributeurs testent leur module ? j'ai bien tenter de débogué mais n'ai certainement pas le niveau
comme mentionné je débute sous zf2 je trouve que c'est pour le coup de l'identification et des droits une horreurs une usine a gaz.
j’utilise zendstudio 11 pour codé pour le déploiement des modules je passe par l'outil composer.json
voici les versions mis en place (car j'ai pu constater dans mes nombreux tentative qu'il y avait toujours un problème de version...
{ "name" : "zendframework/skeleton-application", "description" : "Skeleton Application for ZF2", "require" : { "php" : ">=5.3.3", "zendframework/zendframework" : "2.3.*", "zendframework/zend-developer-tools" : "=0.0.2", "bjyoungblood/BjyProfiler" : "=v1.1.0" }, "keywords" : [ "framework", "zf2" ], "license" : "BSD-3-Clause", "homepage" : "http://framework.zend.com/" }
j'en suis a me demander si je ne ferais pas mieux de développer mes applications de 0 et fuir ce framwork
j'avais apprécier zf1mais là ...
svp j'ai passé beaucoup de temps sur cette partie et j'aimerais vraiment trouver une solution sur cette partie identification role permission
par avance merci pour votre aide
Hors ligne
Salut, si les modules mis à ta disposition ne te conviennent pas tu peux toujours en faire un toi même . Sinon il existe celui-ci qui est maintenu et fonctionne : https://github.com/ZF-Commons/zfc-rbac
Concernant composer normalement si tu l'utilises correctement tu as peu de problèmes. Enfin pour ma part c'est très rare et généralement c'est pas bien méchant .
Hors ligne
merci pour ta réponse
je vais regarder ça
ce qui m'agace sur les versions que j'ai testé par exemple
http://samminds.com/2013/03/zfcuser-bjy … -together/
tout est ok si ce n'est que lorsque je donne par exemple des droits par exemple
array('route' => 'entreprises', 'roles' => array('guest')), array('route' => 'entreprises/add', 'roles' => array('admin')), array('route' => 'entreprises/edit', 'roles' => array('admin')),
tous le monde accède a tout si effectivement j'ajoute
array('route' => 'entreprises', 'roles' => array('admin')), array('route' => 'entreprises/add', 'roles' => array('admin')), array('route' => 'entreprises/edit', 'roles' => array('admin')),
mais du coup je ne vois pas l'intérêt de construire cette usine a gaz
surtout que je n'ai aucun message d'erreur ou quoi que ce soit qui puisse m'aider
bref je vais regarde ce que tu me recommandes merci encore pour la réponse
Hors ligne
Bon pour rbac je reviendrai dessus plus tard... idem en pire, je suis vraiment surpris par la complexités de mise en œuvre de ces systèmes d'identification et autorisations.
j'ai remis en place http://samminds.com/2013/03/zfcuser-bjy … -together/
pour la partie user<->role à la création d'un compte j'ai utilisé un trigger directement en bdd cela simplifie grandement ...
En revanche je cherche a obtenir le role d'un user connecté. là les bras m'en tombent
$this->zfcUserAuthentication()->hasIdentity() ok ça fonctionne bien dans mes contrôleurs ce qui me permet de router sur la page que je veux si le user n'est pas identifié.
$this->zfcUserIdentity()->getEmail() fonctionne très bien dans la vue user mon layout
idem pour les fonction concernant le user mais impossible par exemple d'avoir
getRoles(); qui est définie dans SamUser/src/SamUser/Entity/User.php
je vois bien le role dans la toolbar mais je ne comprend pas comment y accédé dans mes contrôleurs
voilà les modules installé
"name" : "zendframework/skeleton-application", "description" : "Skeleton Application for ZF2", "require" : { "php" : ">=5.3.3", "zendframework/zendframework" : "2.3.*", "zendframework/zend-developer-tools" : "=0.0.2", "bjyoungblood/BjyProfiler" : "=v1.1.0", "doctrine/doctrine-orm-module": "0.7.*", "zf-commons/zfc-user": "0.1.*", "zf-commons/zfc-user-doctrine-orm": "0.1.*", "bjyoungblood/bjy-authorize": "1.2.*" },
merci a vous
Hors ligne
je pense voir le bout du tunnel.
dans le layout principal j'ai ajouté
<?php $temp = $this->zfcUserIdentity()->getRoles(); var_dump($temp); ?>
il me retourne
array (size=1) 0 => object(SamUser\Entity\Role)[556] protected 'id' => int 4 protected 'roleId' => string 'administrator' (length=13) protected 'parent' => object(DoctrineORMModule\Proxy\__CG__\SamUser\Entity\Role)[567] public '__initializer__' => object(Closure)[558] ... public '__cloner__' => object(Closure)[559] ... public '__isInitialized__' => boolean false protected 'id' => string '3' (length=1) protected 'roleId' => null protected 'parent' => null
je ne parviens pas a récupérer uniquement la valeur roleId je me doute que le fait qu'elle soit protected est une incidence mais y a-t-il un moyen de la récupéré pour effectuer des contrôles sur les liens a afficher par exemple ?
par contre au niveau des controlleur pour router les comptes non autorisé vers une page expliquant qu'ils n'ont pas suffisamment de droits je ne parvient toujours pas a récupérer le role
Hors ligne
Déjà regarde la date de ton tuto il a plus d'un an (bientôt 2). A cette époque là le ZF2 venait de sortir donc c'est normal que tu galères plein de choses ont changés. Faut que tu utilises la doc fourni par la module et s'il n'y en a pas soit t'es obligé de faire du reverse engineering pour comprendre comment ça fonctionne soit tu prends un module avec une vrai doc. Pour avoir tester ZfcRbac ça fonctionne plutôt bien !
Hors ligne
Bonjour,
Je retente depuis mon dernier passage d'utiliser ZfcRbac mais j'ai beaucoup de difficultés avec leur doc qui s'adresse tout simplement a des utilisateurs averti ...
au niveau du mapage zfcUser il m'a semblé que cela se passait là
/config autoload/ zfc-rbac.global.php return[ ... 'zfc_rbac' => [ 'identity_provider' => 'ZfcRbac\Identity\AuthenticationIdentityProvider', ], ... ]
jusque là ok je vais dans /config/application.config.php
... 'service_manager' => [ 'aliases' => [ 'Zend\Authentication\AuthenticationService' => 'zfcuser_auth_service' ], ], ....
si je desactive le module ZfcRbac il m'est possible de créer des users de me connecter ....
N'y aurait-il pas une doc complète avec les emplacements de fichiers car je me retrouve avec des bous de code et ne vois pas très bien où les mettre
exemple PostService où dois-je créer cette class ?
/Module
Post
src
Post
Controller
PostController
Service
PostService est-là ?
a partir de la partie 3 on en parle même plus...
Je manque cruellement de temps j'ai développé une bonne partie d'une appli étant persuadé que la partie User/Role/Permission serait similaire au système de module mais je vois que je me trompais lourdement.
j'ai actuellement dans ma toolbar mes trois petit bouclier indiquant le settings, guards et roles quand je change les différents paramètre tout semble être pris en compte
mais pour ce qui est du mapage identification/role/permission ... je patauge complètement
lorsque je lance pour doctrine
/vendor/bin/doctrine-module orm:validate-schema
j'ai bien le résulta escompté
[Mapping] OK - The mapping files are correct.
[Database] FAIL - The database schema is not in sync with the current mapping file.
/vendor/bin/doctrine-module orm:schema-tool:update --force
j'ai plusieurs lignes d'erreurs en retour
je suis tombé sur ça qui ne m'aide pas plus
http://zend-framework-community.634137. … 828111-211
et j'ai pu lire les échanges ici
http://www.z-f.fr/forum/viewtopic.php?id=9047
mais je ne vois pas comment il a résolu le problème de doctrine j'ai pu très facilement l'utiliser sur le premier tuto que j'avais suivi ici
http://samminds.com/2013/03/zfcuser-bjy … -together/
je ne vais pas site toute les sources que j'ai lu n'y aurait-il pas un schema, une doc pour les null
Merci pour votre aide
Hors ligne
Salut, si tu veux de l'aide fais un truc propre, bien détaillé avec tes messages d'erreurs et tout. Franchement là on y comprend plus rien ... Ta config de ZfcUser n'a rien à faire dans application/config par exemple.
Relis toi bien que ça soit clair .
Hors ligne
Salut,
je travail en ce moment sur le module zfcRbac/ZfcUser et j'ai une implémentation correcte de ces modules avec une navigation selon les droits,si tu veux y jeter un œil ou même carrément le télécharger tu peux :
https://github.com/jonathangreco/jonathan
Si tu l'installe pense à ajouter certains roles et certaines permissions :
roles :
- guest
- admin
- user
permission
- admin
- seeAccount
Dernière modification par JGreco (24-12-2014 08:56:44)
Hors ligne
Bonjour
Désoler pour la coupure je n'était plus dispo
Merci pour ta proposition j'allais revenir vers vous ce soir j'ai trouvé ça
https://github.com/svmashtaler/zf2-zfcuser-zfcrbac qui semble être le rendu de la doc avec implémentation du zfcuser
https://github.com/ZF-Commons/zfc-rbac/tree/master/docs
je l'ai implémenté et ça fonctionne juste quelques points que je dois encore comprendre.
Mais ta proposition m’intéresse je ne manquerais pas de te faire des remonté ou proposition.
Encore merci pour votre aide
Hors ligne
Je suis occupé a déployer tes modules.
Quand je tente de mettre à jour la bdd avec
/vendor/bin/doctrine-module orm:schema-tool:update --force
j'ai ce message en retour
[Doctrine\Common\Persistence\Mapping\MappingException] File mapping drivers must have a valid directory path, however the given path [E:\wamp\www\MyTest\module\Admin\config/../src/Admin/Entity] seems to be incorrect! orm:schema-tool:update [--complete] [--dump-sql] [--force]
petite remarque pourquoi ne pas mettre les tables sous forme de fichier sql ?
j'ai tenté de passer outre en créant au fur et a mesure les tables et colonne mais c'est sans fin...
J'espère ne pas être le seul dans ce cas mais pour comprendre je regarde ce qui est fait je test, je modifie ... (c'est en faisant qu'on devient...)
là il faut déjà chercher a "débogué" ne maitrisant pas encore toutes les subtilités sincèrement c'est rebutant.
Avant d'attirer les foudres ... ce n'est pas un reproche, juste que c'est encore une fois du temps de perdu. sincèrement passer des heures a cherche a comprendre pourquoi il ne fonctionne pas c'est frustrant et surtout je ne suis pas convaincu que ce soit constructif ...
Donc si tu veux bien de ce retour
ajoute un data/bdd.sql avec tes fichiers
Hors ligne
petit soucis quand je vais directement sur
http://monsite.loc/backend/rights
alors que je ne suis pas identifier j'ai accès a tout
je te remonte ce que je vois au fur et a mesure
j'ai ajouter ces entrées dans la table permissions
active
add
addentreprisetograppe
admin
delete
desactive
edit
fiche
seeAccount
ensuite j'ai voulu mettre à jour le roler user via ton form j'ai en retour :
Allowed memory size of 134217728 bytes exhausted (tried to allocate 4237248 bytes) in E:\wamp\www\Mysite\vendor\zf-commons\zfc-rbac\src\ZfcRbac\Collector\RbacCollector.php on line 166
quand on veut s'identifier tu appel displayName c'est dommage à l'origine c'est display_name
Dernière modification par xiii (29-12-2014 02:17:54)
Hors ligne
Salut,
Pense à éditer la prochaine fois, 3 posts d'affilé ça fait beaucoup ...
Avoir un fichier SQL ne corrigera pas le problème, effectivement tu auras la base de données avec les tables mais doctrine plantera toujours par la suite. Pour corriger le problème supprime le tableau 'doctrine' dans module.config.php dans le module Admin. En gros le problème vient du fait qu'on lui indique que les modèles se trouvent dans le dossier src/Admin/Entity sauf que pour le module Admin il n'y a pas de modèles donc forcément il te dit que le chemin n'est pas correct.
Je ne sais pas si ça corrigera tous tes problèmes (probablement pas celui du formulaire, parce qu'une erreur de mémoire ça ressemble quand même à une belle boucle infinie ou alors beaucoup trop de droits à récupérer ou autre donc ça indique en général un problème de conception).
J'ai regardé vite fait le code du module et je te déconseille de t'inspirer de ça. Pour l'utilisation du module ZfcRbac tu peux regarder mais de ce que j'ai vu sur le code général c'est assez crade (dsl c'est méchant mais bon faut être réaliste).
Hors ligne
Bonjour,
oui doctrine plantera toujours sans corriger le problème mais ça permet d'aider a comprendre le fonctionnement (et surtout de s'affranchir de doctrine, je suis complètement d'accord sur ses bénéfices mais wouach je voudrais déjà savoir utiliser zf avant de passer a la couche doctrine).
J'avais viré le tableau doctrine mais j'ai d'autre erreur mais cela ne concerne pas ce post ;p
Pour la boucle infinie je suis d'accord avec toi mais j'ai juste ajouté différent rôles dans la table, je regarderais ça plus tard.
Pour l'exemple pas forcement méchant mais au moins je peut voir où va quoi ce que j'avais du mal a comprendre justement avec la doc (en même temps je lit ZF2 industrialisez vos développements et au cœur de ZF2 mais malheureusement pour moi je suis dans l'utilisation pour comprendre :'( )
par contre je me retrouve dans le même cas que lors de mes premiers test avec BjyAuthorize
soit je bloque tout soit c'est open bar
ais-je bien compris ce fonctionnement :
a savoir j'ai home qui route vers le module application/index
et entreprise est un autre module dans /module/Entreprises/Modules.php
j'ai bien ajouté mais je ne suis pas certain que cela soit nécessaire car je le fait déjà dans le module application
public function onBootstrap(MvcEvent $e) { $t = $e->getTarget(); $t->getEventManager()->attach( $t->getServiceManager()->get('ZfcRbac\View\Strategy\UnauthorizedStrategy') ); }
dans /config/autoload/zfc_rbac.global.php j'ai ça
... 'guest_role' => 'guest', 'protection_policy' => \ZfcRbac\Guard\GuardInterface::POLICY_DENY, 'unauthorized_strategy' => [ 'template' => 'error/no-auth' ], 'redirect_strategy' => [ 'redirect_to_route_connected' => 'home', 'redirect_to_route_disconnected' => 'zfcuser/login', 'append_previous_uri' => true, 'previous_uri_query_key' => 'redirectTo' ], 'guards' => [ 'ZfcRbac\Guard\RouteGuard' => [ 'home' => ['*'], // ici tout le monde à accès c'est ok 'zfcuser' => ['user'], // ici les roles user et parent on accès ok 'zfcuser/logout' => ['user'], // ici les roles user et parent on accès ok 'zfcuser/login' => ['guest'], // ici guest à accès ok 'zfcuser/register' => ['guest'], // ici guest à accès ok 'entreprises' => ['guest'], // ici guest à accès ko juste admin 'entreprises/liste' => ['guest'], // ici guest à accès ko juste admin 'entreprises/fiche' => ['guest'], // ici guest à accès ko juste admin 'entreprises/add' => ['admin'], // ici admin ok 'entreprises/edit' => ['admin'], // ici admin ok ] ], ...
pour les rôles et permissions et je voudrais déjà confirmation les permissions correspondent bien aux actions du contrôleur ?
... 'role_provider' => [ 'ZfcRbac\Role\InMemoryRoleProvider' => [ 'admin' => [ 'children' => ['owner'], 'permissions' => ['delete'] ], 'owner' => [ 'children' => ['user'], 'permissions' => ['add','edit','desactive','active'] ], 'user' => [ 'children' => ['guest'], ], 'guest' => [ 'permissions' => ['liste','fiche'] ] ] ], ...
si je comprend bien le parent prends bien les permission de l'enfant ok mais pourquoi je ne peux-pas accéder a
'entreprises'
'entreprises/fiche'
en guest ?
ce que je ne comprend pas non plus mais je pense que c'est lié aux permissions. j'ai par exemple dans /module/Entreprises/view/liste.phtml des liens construits de cette manière
<a href="<?php echo $this->url('entreprises', array('action'=>'edit', 'id' => $entreprise->id_entreprise));?>"> <?php echo $this->translate('Edit'); ?></a>
Hors ligne
Alors pour doctrine je ne suis pas d'accord avec toi. Perso je n'ai jamais utiliser Zend\Db sauf pour le tuto du quickstart il y a peut être 2 ans. Et franchement utiliser doctrine avec le ZF2 ne complexifie pas plus que ça le code puisque c'est 2 couches bien distinctes.
Au coeur du ZF2 est vraiment bien comme livre. Un peu complexe quand on débute mais par la suite on y apprend pas mal de chose (même s'il y a eu des modifications depuis). L'autre il faut le prendre avec des pincettes il y a des passages qui ne respectent pas les recommandations mais il a l'avantage d'être beaucoup plus accessible.
Je pense que tu n'as pas très bien compris le système de modules déjà. Puisque ça ne s'arrête pas qu'au fichier Module.php, faut voir ça comme une brique de ton application "autonome". Les configurations de tous tes modules sont mergées dans une seule donc tu n'as pas besoin de mettre "UnauthorizedStrategy" partout. Dans application ça suffit.
Pour tes permissions faut que tu creuses un peu il y a quelque chose que tu as du louper. Relis bien la doc car pour avoir utilisé ce module ça fonctionne bien .
Je vois pas où est ton problème sur les liens à la fin de ton poste. Bon sans parler du fais que tes routes sont sans doute mal déclarées vu que tu utilises "action" alors que tu peux le renseigner directement dans l'url. Donc précise ta question .
Hors ligne
Ok pour Doctrine mais sincèrement, ça me semble lourd bref c'est mon point de vue. Il changera certainement d'ici quelque temps.
Pour le système de module si j'avais bien intégrer ce principe mais a un moment quand tu as fait tout les testes et tentatives...
On est clairement d'accord j'ai louper quelque chose mais je ne vois pas quoi, et surtout même avec la toolbar je n'ai ni message erreur ni information qui pourrait m'aider a comprendre ce qui cloche.
Je pense que la déclaration des route est en cause, j'ai effectivement un peut de mal a cerner les différences entre les segment, littéral...
a la base j'avais des route sous ce format je le trouvais très pratique car il couvrait tous mais il semble que ça ne permet pas de faire fonctionner correctement rbac
... 'entreprises' => array( 'type' => 'Literal', 'options' => array( 'route' => '/entreprises[/][:action][/:id]', 'constraints' => array( 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 'id' => '[0-9]+', ), 'defaults' => array( 'controller' => 'Entreprises\Controller\Entreprises', 'action' => 'liste', ), ), ...
je suis passer sur une déclaration de ce type
... 'routes' => array( 'entreprises' => array( 'type' => 'Literal', 'options' => array( 'route' => '/entreprises', 'defaults' => array( 'controller' => 'Entreprises\Controller\Entreprises', 'action' => 'liste', ), ), 'may_terminate' => true, 'child_routes' => array( 'liste' => array( 'type' => 'Segment', 'options' => array( 'route' => '/[:action[/:id]]', 'constraints' => array( 'action' => 'liste', 'id' => '[0-9]+' ), 'defaults' => array( ), ), ), 'fiche' => array( 'type' => 'Segment', 'options' => array( 'route' => '/[:action[/:id]]', 'constraints' => array( 'action' => 'fiche', 'id' => '[0-9]+' ), 'defaults' => array( ), ), ), 'add' => array( 'type' => 'Segment', 'options' => array( 'route' => '/[:action]', 'constraints' => array( 'action' => 'add', ), 'defaults' => array( ), ), ), ... ), ), ....
ça me semble fou et lourd mais c'est ce que j'ai trouver dans les exemples...
Oui effectivement j'ai du être déranger pour les liens... je n'ai pas précisé
en gros quand je regarde le rendu du lien
j’obtiens ça
/entreprises
au lieu de
/entreprises/edit/115
j'ai le même problème avec la construction de lien pour un formulaire
$form->setAttribute('action', $this->url( 'entreprises/fiche', array( 'id' => $this->id_entreprise, ) ));
on est d'accord que je devrais trouver une url du type http://monsite.com/entreprises/fiche/223 là j'ai juste
http://monsite.com/entreprises je ne comprend pas pourquoi ?
Tu recommanderais d'utiliser quel format de construction de lien si il ne faut pas utiliser l'action ?
tu dirais de mettre directement
<a href="/entreprise/edit/<?php echo $entreprise->id_entreprise; ?>"> <?php echo $this->translate('Edit'); ?></a>
Je vais relire la doc pour les droits
Merci pour ton aide passé un bon réveillon nous y est presque a l'année prochaine.
Dernière modification par xiii (31-12-2014 05:55:44)
Hors ligne
Alors une route de type Literal n'est pas dynamique on va avoir comme routes de type Literal : /users/show, /entreprises/foo etc ... Alors que des routes de type Segment peuvent être dynamique c'est pour ça qu'on leur indique des parties sous forme ':monparam' ou '[:monparam]' dans le cas où il est optionnel.
Tu vas pouvoir avoir une route Segment comme ceci /users/:id qui pourra valoir /users/1, /users/2, /users/show si tu n'as pas précisé de contrainte spécifique pour le paramètre id, ce qu'il faut faire dans le tableau 'constraints'.
Ensuite le but des routes n'est pas de couvrir tous les cas, certes c'est plus rapide à mettre en place, tu fais une belle route générique et après elle fait tout tout seul sauf que c'est pas l'idéal. Le mieux c'est d'avoir une route pour chaque url de ton application (ça peut en faire beaucoup mais au moins c'est propre). Ensuite dans tes routes tu peux virer le paramètre :action tu n'as pas besoin de le mettre en dynamique puisque tu as une route pour chaque action tu vas donc avoir :
[lang=php] 'liste' => array( 'type' => 'Segment', 'options' => array( 'route' => '/liste/:id', 'constraints' => array( 'id' => '[0-9]+' ), 'defaults' => array( 'action' => 'liste', 'controller' => 'Entreprises\Controller\Entreprises' // pas obligatoire puisque renseigné dans la route mère ), ), ),
Ensuite l'utilisations de constraints c'est vraiment pour limiter (en mode regexp) l'utilisation des paramètres. Là dans ton cas tu met une action dynamique via le paramètre :action que tu contrains à être liste, autant l'écrire en dure directement dans l'url et spécifier que l'action par défaut est liste. De cette façon elle ne pourra pas être changée puisqu'il n'y a plus le paramètre action dans ton url. Je sais pas si tu vois où je veux en venir ?
Déjà de cette manière ça sera plus simple pour faire fonctionner rbac tu y verras plus claire entre tes différentes routes. Pour faire tes liens tu peux faire :
[lang=php] // 'entreprises' => nom de la route mère // '/' => le séparateur au niveau de l'url entre les 2 routes // 'liste' => nom de la route fille // plus besoin de préciser action vu qu'il n'est plus dynamique et précisé dans ta route :). <?php echo $this->url('entreprises/liste', array('id' => $entreprise->id_entreprise));?>
Hors ligne
Bonjour,
désolé pour l’absence j'étais en vacances à l'étranger, pas dispo et pas de PC.
Mon projet n'avait pour vocation qu'a t'aider à mettre ZfcRbac avec ZfcUser et t'offrir la possibilité d'aller plus loin, mon projet est en cours de dev et change tous les jours quand je bosse dessus, désolé si j'ai pas été très clair à ce niveau.
Pour ton soucis de permissions, a tu peuplé manuellement les table hierarchicalrole_hierarchicalrole et hierarchicalrole_permissions ? Ce sont des tables de relation qui permettent de brider les roles et justement d'interdire les accès aux routes selon les permissions. Mais comme à dit Orkin ne t'inspire pas trop de mon projet pique y juste quelque idée si tu les trouve bonnes, mais tout n'est pas a prendre.
Pour tes problèmes rencontrés sur l'installation de mon projet, je pense que c'est juste une étape qui t'a manqué, car les routes sont bien valable en réalité voici les insert à effectuer pour les role et permission dont je t'avais parlé :
[lang=sql]INSERT INTO `roles` VALUES('', 'admin'), ('', 'guest'), ('', 'user'); INSERT INTO `permissions` VALUES('', 'seeAccount'), ('', 'admin'); INSERT INTO `hierarchicalrole_permission` VALUES(1, 1), (1, 2), (3,1); INSERT INTO `hierarchicalrole_hierarchicalrole` VALUES(1, 2), (1, 3), (3,2);
J'insère mes trois roles, admin vaut 1, guest 2, user 3
J'insère mes permissions : seeAccount vaut 1, admin vaut 2
J'affecte mes permission aux roles : role admin possède admin et seeAccount, user possède seeAccount
Mes roles sont parent d'autre role ainsi : admin est parent de guest et de user en définitive ceci dit que admin possède les permissions de ses roles enfants
Une fois ces roles créer tu peux créer un compte une fois ce compte créé il porte l'id 1(si l'autoincrément est vierge) dès la création mon projet lui attribut le role user, tu peux modifier son role dans la table user_hierarchicalrole et lui mettre l'id du role admin si tu fais cela tu aura la permission d'accéder aux backend. à partir de la tu peux créer un second compte que tu laissera User, et tu pourra checker les permissions.
Voilà, avec ces explications j'espère que c'est plus clair.
J'espère t'avoir un peu mieux éclairé sur tout cela. J'essayerai de mettre au propre ce projet en suivant quelques conseil qui m'ont été donnés, mais d'ici là ne perd pas trop de temps à debugger mon bousin
Bonne année à vous au fait !
Dernière modification par JGreco (05-01-2015 10:05:48)
Hors ligne
T'as une erreur dans ta hiérarchie c'est un peu redondant d'avoir Admin qui hérite de user et guest et user qui hérite de guest. Tu pourrais faire admin qui hérite de user et user hérite de guest ça te ferait : admin > user > guest.
User a les permissions de guest, et admin à la permission de user (qui contiennent celles de guest)
Hors ligne
C'est vrai en effet.
Hors ligne
Bonjour,
Je suis désolé pour le temps de réponse, meilleur vœux a tous et merci pour votre aide.
Merci Orkin pour ton aiguillage j'ai plongé dans au cœur de ZF2 dans le bon chapitre effectivement mon problème venait de mes fichiers /module/Application/config/module.config.php
la déclaration des routes était faite de façon générique
JGreco oui j'avais compris que ce module te servait de base pour ta certif, mais je voulais voir un système fonctionner pour le comprendre. malheureusement dans les docs il n'est que rarement montré où va tel ou tel fichier quand on le sais c'est évident mais wouatch quand ce n'est pas le cas...
je ne travail pas encore avec une bdd pour les rôles permissions j’étudie déjà en local avec les différentes portées.
Depuis que j'ai ré-écris mes routes tout est ok
Je dois encore apprivoiser la bête mais c'est en bonne voie enfin j'espère.
si ça peux servir a quelqu'un si vous parvenez a faire fonctionner le système user/role/permission (affichage des roles/permission dans la toolbar) mais qu'en réalité vous n’obtenez pas le fonctionnement sur vos pages vérifiez vos liens et les routes
pour les liens
préférer
<a href="<?php echo $this->url('entreprises/edit', array('id' => $entreprise->id_entreprise));?>"> <i class="fa fa-edit bleu" title="<?php echo $this->translate('Edit'); ?>"></i></a>
à
<a href="<?php echo $this->url('entreprises', array('action'=>'edit', 'id' => $entreprise->id_entreprise));?>"> // l'action est a définir dans le fichier /module/votre_module/config/module.config.php <i class="fa fa-edit bleu" title="<?php echo $this->translate('Edit'); ?>"></i></a>
pour le fichier /module/votre_module/config/module.config.php
préférer
'router' => array( 'routes' => array( 'entreprises' => array( 'type' => 'Literal', 'options' => array( 'route' => '/entreprises', 'defaults' => array( 'controller' => 'Entreprises\Controller\Entreprises', 'action' => 'index', ), ), 'may_terminate' => true, 'child_routes' => array( 'edit' => array( 'type' => 'Segment', 'options' => array( 'route' => '/edit/:id', 'constraints' => array( 'id' => '[0-9]+' ), 'defaults' => array( 'action' => 'edit', ), ), ), ... // chaque action dois être écrite
à
'router' => array( 'routes' => array( 'entreprises' => array( 'type' => 'Segment', 'options' => array( 'route' => '/[:controller[/:action]]', 'constraints' => array( 'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', ), 'defaults' => array( 'controller' => 'Entreprises\Controller\Entreprises', 'action' => 'index', ), ), ...
le second est plus alléchant car il couvre tous mais ça ne fonctionne pas
J'espère que ça aidera et que ce que j'ai écris est correcte
Dernière modification par xiii (08-01-2015 01:46:22)
Hors ligne