Bonjour à tous,

Je viens de terminer un cours sur l'apprentissage du framework Symfony 3 et je me lance maintenant dans le développement / refonte d'un intranet pour une société.

Cependant j'ai encore quelques points qui restent assez flous et principalement au niveau de la gestion des rôles, et autorisations pour chaque utilisateur.

Je dispose d'un intranet avec différents modules (pages) qui contiennent eux différentes actions possibles selon le rôle d'un utilisateur. De plus, un utilisateur peut avoir en plus de son rôle, un accès à un module précis que le rôle ne dispose pas. J'ai donc un peu de mal à comprendre comment gérer les autorisations de chaque rôle et avec quel outils / bundle le faire.

Concrètement il me faudrait un module admin qui permettent de modifier les droits de chaque rôle, mais aussi de donner une autorisation à un module particulier pour un utilisateur précis.

J'ai effectué pas mal de recherches avant de poster sur le forum, j'ai trouvé beaucoup d'informations différentes (FOSUserBundle, SonataAdminBundle) mais je n'ai pas réussi à trouver un schéma précis de la gestion des droits ou un système qui correspond à mes besoins.

Merci à tous pour votre soutien,

3 réponses


Bonjour PogProp

Pour les roles c'est une fonction native de Symfony je t'invite à regarder la documentation sur cette page http://symfony.com/doc/current/security.html.

Moi par exemple pour un forum j'ai créer un role ROLE_MODERATOR qui hérite du role ROLE_USER

role_hierarchy:
        ROLE_MODERATOR:   ROLE_USER
        ROLE_ADMIN:       [ROLE_USER, ROLE_MODERATOR]
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_MODERATOR, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

Dans cet exemple le ROLE_MODERATOR aura des droits spécifiques suivant les reglages d'ACL. Il hérite aussi des droits ROLE_USER.
Donc pour mon forum je lui est donné les droits d'édition et de verrouillage des messages.

Si tu as d'autres questions n'hésite pas

PogProp
Auteur

Bonjour Olive140,

Tout d'abord merci pour ta réponse, effectivement je me suis un peu renseigné avec la doc officielle. Au niveau des roles tout me semble bon, le souci est plutot la suite justement avec ACL. Je n'arrive pas vraiment à comprendre comment tout cela fonctionne.

Ce que je voudrais c'est une interface afin de donner des autorisations spécifiques à un utiisateur ou à un groupe par exemple mais assez complexe à comprendre :)

Désolé de ne pas tout comprendre mais c'ets vraiment la partie la plus floue dans ma tête...

Je vais essayer de faire simple, supposons que tu as une section commerciale et une technique.
Tu crée tes des rôles ROLE_COM et ROLE_TECH.

les urls : http://tonsite.com/commercial et http://tonsite.com/technique qui sont définis dans tes routes.

    role_hierarchy:
        ROLE_COM:   ROLE_USER
        ROLE_TECH:  ROLE_USER
        ROLE_ADMIN:       [ROLE_COM, ROLE_TECH, ROLE_USER]

    access_control:
        - { path: ^/yaqueladminquiasledroit, role: ROLE_ADMIN }
        - { path: ^/technique, role: ROLE_TECH }
        - { path: ^/commercial, role: ROLE_COM }

Dans cette exemple les routes commencant par /technique ne seront accessible que par le role technique.

Tu peux aussi définir ceci directement dans le controleur avec les annotations

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
// ...

/**
 * Accès à la technique.
 *
 * @Route("/technique", name="par_ici_la_technique")
 * @Security("has_role('ROLE_TECH')")
 */
public function techAction()
{
    // ...
}

Pour ton interface tu crée tes différents rôles puis tu crée un formulaire qui permet de changer le rôle d'un utilisateur à partir de l'entité.
L'entité utilisateur possède un entrée roles donc juste à créer le formulaire qui vas bien.