Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 16-12-2014 11:30:26

xiii
Membre
Date d'inscription: 17-08-2014
Messages: 14

BjyAuthorize - Guard\Controller VS Guard\Route

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

Code:

...
'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

Code:

array('controller' => 'Entreprises\Controller\Entreprises', 'action'=>'index', 'roles' => array('guest', 'user','admin')),

je ne peux pas accéder à index
mais si je fais

Code:

 
array('controller' => 'Entreprises\Controller\Entreprises', 'action'=>'add', 'roles' => array('admin')),

ça fonctionne pour admin

si j'ajoute par contre

Code:

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

Code:

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

 

#2 18-12-2014 07:39:05

xiii
Membre
Date d'inscription: 17-08-2014
Messages: 14

Re: BjyAuthorize - Guard\Controller VS Guard\Route

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

Code:

{
  "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

 

#3 18-12-2014 15:33:41

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

Re: BjyAuthorize - Guard\Controller VS Guard\Route

Salut, si les modules mis à ta disposition ne te conviennent pas tu peux toujours en faire un toi même wink. 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 wink.

Hors ligne

 

#4 18-12-2014 21:56:00

xiii
Membre
Date d'inscription: 17-08-2014
Messages: 14

Re: BjyAuthorize - Guard\Controller VS Guard\Route

merci pour ta réponse smile
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

Code:

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

Code:

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 sad
bref je vais regarde ce que tu me recommandes merci encore pour la réponse

Hors ligne

 

#5 19-12-2014 06:15:33

xiii
Membre
Date d'inscription: 17-08-2014
Messages: 14

Re: BjyAuthorize - Guard\Controller VS Guard\Route

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é

Code:

  "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

 

#6 19-12-2014 08:13:32

xiii
Membre
Date d'inscription: 17-08-2014
Messages: 14

Re: BjyAuthorize - Guard\Controller VS Guard\Route

je pense voir le bout du tunnel.

dans le layout principal j'ai ajouté

Code:

      <?php
     $temp = $this->zfcUserIdentity()->getRoles();
     var_dump($temp); 
     ?>

il me retourne

Code:

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

 

#7 19-12-2014 10:59:07

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

Re: BjyAuthorize - Guard\Controller VS Guard\Route

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

 

#8 23-12-2014 09:28:45

xiii
Membre
Date d'inscription: 17-08-2014
Messages: 14

Re: BjyAuthorize - Guard\Controller VS Guard\Route

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à

Code:

/config
  autoload/
      zfc-rbac.global.php

return[
...
'zfc_rbac' => [
         'identity_provider' => 'ZfcRbac\Identity\AuthenticationIdentityProvider', 
],

...
]

jusque là ok je vais dans /config/application.config.php

Code:

...
'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

 

#9 24-12-2014 00:09:30

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

Re: BjyAuthorize - Guard\Controller VS Guard\Route

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 smile.

Hors ligne

 

#10 24-12-2014 08:53:12

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

Re: BjyAuthorize - Guard\Controller VS Guard\Route

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)


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

Hors ligne

 

#11 28-12-2014 22:14:41

xiii
Membre
Date d'inscription: 17-08-2014
Messages: 14

Re: BjyAuthorize - Guard\Controller VS Guard\Route

Bonjour smile

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

 

#12 29-12-2014 01:27:17

xiii
Membre
Date d'inscription: 17-08-2014
Messages: 14

Re: BjyAuthorize - Guard\Controller VS Guard\Route

Je suis occupé a déployer tes modules.

Quand je tente de mettre à jour la bdd avec

Code:

/vendor/bin/doctrine-module orm:schema-tool:update --force

j'ai ce message en retour

Code:

[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

 

#13 29-12-2014 01:58:59

xiii
Membre
Date d'inscription: 17-08-2014
Messages: 14

Re: BjyAuthorize - Guard\Controller VS Guard\Route

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

 

#14 29-12-2014 12:10:31

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

Re: BjyAuthorize - Guard\Controller VS Guard\Route

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

 

#15 30-12-2014 07:26:39

xiii
Membre
Date d'inscription: 17-08-2014
Messages: 14

Re: BjyAuthorize - Guard\Controller VS Guard\Route

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

Code:

    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

Code:

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

Code:

...
        '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

Code:

<a href="<?php echo $this->url('entreprises',
             array('action'=>'edit',   'id' => $entreprise->id_entreprise));?>">
                <?php echo $this->translate('Edit'); ?></a>

Hors ligne

 

#16 30-12-2014 11:23:49

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

Re: BjyAuthorize - Guard\Controller VS Guard\Route

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 wink.

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 smile.

Hors ligne

 

#17 31-12-2014 00:52:03

xiii
Membre
Date d'inscription: 17-08-2014
Messages: 14

Re: BjyAuthorize - Guard\Controller VS Guard\Route

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

Code:

...
            '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

Code:

...
        '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

Code:

 $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

Code:

<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 wink a l'année prochaine.

Dernière modification par xiii (31-12-2014 05:55:44)

Hors ligne

 

#18 31-12-2014 11:23:02

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

Re: BjyAuthorize - Guard\Controller VS Guard\Route

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 :

Code:

[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 :

Code:

[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

 

#19 05-01-2015 00:42:55

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

Re: BjyAuthorize - Guard\Controller VS Guard\Route

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é :

Code:

[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 wink

Bonne année à vous au fait !

Dernière modification par JGreco (05-01-2015 10:05:48)


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

Hors ligne

 

#20 05-01-2015 14:54:43

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

Re: BjyAuthorize - Guard\Controller VS Guard\Route

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

 

#21 05-01-2015 14:59:39

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

Re: BjyAuthorize - Guard\Controller VS Guard\Route

C'est vrai en effet.


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

Hors ligne

 

#22 08-01-2015 01:45:15

xiii
Membre
Date d'inscription: 17-08-2014
Messages: 14

Re: BjyAuthorize - Guard\Controller VS Guard\Route

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 wink 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 sad 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 smile

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

Code:

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

à

Code:

<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

Code:

'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

à

Code:

'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

 

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