IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

question sur les rôles [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut question sur les rôles
    Booooooooooooooooooonjour,



    je voudrais mettre en place un système de rôle un peu particulier.

    en effet, disons que j'ai 5 pages et donc pour acceder à ces pages avoir le role correspondant: role_age1, role_page2, role_page3 ....
    jusque là ça va, c'est facile. the finger in the noise .... la lambada


    maintenant je veux donner en plus des droits d'édition, de suppression, d'enregistrement qui sont différents pour chaque page et bien sur en fonction des utilisateur

    et là c'est le drame, je ne sais pas comment faire.


    j'ai une piste mais je ne sais pas si c'est une bonne façon de faire ? ( car du coup ça fait une longue liste de rôle à créer )

    exemple des differents rôles:
    role_page1 (accès à la page 1)
    role_page1_lecture
    role_page1_suppression
    role_page1_enregistrement

    role_page2 (accès à la page 2)
    role_page2_lecture
    role_page2_suppression
    role_page2_enregistrement
    ...

    user1 a les rôles suivants : role_page1, role_page1_lecture, role_page1_suppression
    user2 a les rôles suivants : role_page2, role_page2_enregistrement

  2. #2
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut
    bonjour. Il serait bon d'utiliser un tableau associatif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Role    Page      Create    Read  Update       Delete
    1        1        1         1         0        0
    1        3        0         1         0        0
    2        1        1         1         1        1
    3        2        0         0         0        0
     
    CRUD ont pour valeur 
    0 pas d'autorisation
    1 autorisation
     
    Une personne de role 1 pourrait lire la page 1 et 3 avec ses droit sur tel page. c'est un plus.
    voila à toi de voir

  3. #3
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Salut,

    je suggère une table dans une base de données. (Entre parenthèses les types de champs.)
    id_user (BIGINT UNSIGNED) role_page1_lecture (BOOL) role_page1_ecriture (BOOL) role_page1_suppression (BOOL) role_page2_lecture (BOOL) role_page2_ecriture (BOOL) role_page2_suppression (BOOL)
    1 TRUE TRUE TRUE TRUE FALSE FALSE
    2 TRUE FALSE FALSE TRUE TRUE FALSE
    etc.

    Bien sûr, ça fait beaucoup de colonnes. Une autre solution serait de s'inspirer du système de droits Unix : coder tous les droits sur le même octet (style 101 en binaire ( = 5 en décimal) qui signifie lecture et suppression mais pas écriture), ou bien une chaîne de caractères (par exemple rwx ou encore rw- : r signifie lecture (read), w écriture (write) et x suppression ; le tiret - signifie qu'on n'a pas le droit correspondant).

    Le binaire est plus efficace si tu es à l'aise avec les opérations binaires. Sinon, manipuler les chaînes (avec stripos par exemple) sera sans doute plus facile. Du coup, la table ressemblerait à ça :
    id_user (BIGINT UNSIGNED) role_page1 (CHAR(3)) role_page2 (CHAR(3))
    1 rwx r--
    2 r-- rw-
    etc.

    Voici donc deux variantes d'une même solution. Choisis celle que tu préfères.

    Je ne sais pas si c'est une bonne façon de faire, notamment car elle t'oblige à modifier la structure de ta table (ajouter des colonnes) quand tu ajoutes des pages. Je n'ai jamais rencontré ce genre de besoins, mais c'est comme ça que je ferais
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  4. #4
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut
    Oui dans une table de bdd oui ca serait bien.

  5. #5
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    merci les amis pour vos indications.

    seulement, je ne voulais pas accéder à la base pour savoir si une personne peut accéder ou pas à une page et avec quel droit.


    en effet, on peux récupérer le ou les rôles du user connecté à partir de sa session.
    et donc je voulais savoir si il y avais une solution de ce coté

  6. #6
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Citation Envoyé par dukoid
    en effet, on peux récupérer le ou les rôles du user connecté à partir de sa session
    Peux-tu préciser ce point ?
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  7. #7
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    et bien par exemple dans un controleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     if ( $this->get('security.context')->isGranted('ROLE_ADMIN') ) {
    ....
    }
    ou alors dans une vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    {% if is_granted('ROLE_ADMIN') %} ... {% endif %}

    et donc moi je veux le même système..

  8. #8
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut
    je viens de relire "comment récupérer et enregistrer des variables en session depuis un controlleur (c'est ce que tu veux).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    pour enregistrer puis récupérer des variables sessions 
    $session = $this->getRequest()->getSession();
     
    //enregistrer une valeur en session
    $session ->set('ma_clé', 'ma_valeur');
     
    //récupérer une valeur
     
    $maCle = $session->get('ma_clé);
    En espérant que cela t'aidera.

  9. #9
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    C'est une bonne idée d'utiliser le système de sécurité de Symfony, à condition que tu gères correctement les différents rôles. Pour faire court, il vaut mieux plusieurs rôles avec peu de droits, plutôt que peu de rôles avec beaucoup de droits.

    Lis l'introduction sur la sécurité avec Symfony si tu ne l'as pas déjà fait.

    Par ailleurs, tu ne nous as pas dit comment tes pages sont stockées ; si elles sont dans une base de données, la mise en œuvre de listes de contrôle d'accès est la solution la plus adaptée à ton scénario. Sinon, jette un œil à Comment sécuriser n'importe quel service ou méthode de votre application.

    Dans tous les cas, tu as tout à gagner à utiliser les fonctionnalités de Symfony, pour ne pas réinventer la roue.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  10. #10
    Membre averti Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    632
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 632
    Points : 405
    Points
    405
    Par défaut
    Je n'ai rien voulu dire sur la sécurité de symfony2 mais c'est dangereux de jouer avec.

  11. #11
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    j'suis un fou moi, je joue avec .. non mais


    j'ai déjà lu tout ça les amis !!! mais je ne vois pas comment résoudre mon pb

  12. #12
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Pourquoi est-ce que tu souhaites à tout prix faire des rôles pour chaque action ? Tu perds l'utilité des rôles en faisant ça : à savoir un rôle = un ensemble d'actions permises.

    Ne serait-ce pas plus simple pour chacune de tes actions d'y mettre un PreAuthorise (JMS\SecurityExtraBundle) dans lequel tu fais toutes les vérifications de ton choix ?

    Est-ce que les autorisations de chaque user pour chaque action sont amenées à être changées depuis une interface de ton logiciel ?
    Est-ce que tu as jeté un coup d'oeil aux Voters ?

  13. #13
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    Est-ce que les autorisations de chaque user pour chaque action sont amenées à être changées depuis une interface de ton logiciel ?
    OUI, l'admin pourra modifier dynamiquement les droits d'accès et de lecture, modification etc....

    Est-ce que tu as jeté un coup d'oeil aux Voters ?
    OUI, un voter s'applique à un objet mais moi c'est pas le cas.
    c'est ce que peux faire une personne sur une page
    par ex le bouton modifier apparaîtra s'il à le droit de modification sur la page(url) X


    donc je ne sais toujours pas comment faire pour gérer tout ça

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 168
    Points : 219
    Points
    219
    Par défaut
    OUI, un voter s'applique à un objet mais moi c'est pas le cas.
    tu veux dire que le voter ne peux pas être un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    isGranted('ROLE_USER_CAN_EDIT_PAGE')
    mais forcement un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    isGranted('ROLE_USER_CAN_EDIT_OBJECT',$object)
    ??

  15. #15
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    isGranted('ROLE_USER_CAN_EDIT_PAGE')
    ici, la personne à le rôle d'édition mais pour quel page? n'oublions pas que j'ai 5 pages(url) differentes et chaque page je donne des droits différents(edit, create, lecture...)




    quant à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    isGranted('ROLE_USER_CAN_EDIT_OBJECT',$object)
    le rôle edit pour un objet mais là encore ce n'est pas un objet cela concerne une page ....



    vous comprenez le bins !!




    ps: je répète ma demande :

    un admin définis pour tel ou tel utilisateur des droits d'accès et aussi des droits (edit, create, lecture...) pour 5 pages différentes(correspond en fait à 5 URL).

    donc quand un utilisateur veut accéder à une page il est autorisé ou pas a y aller.
    si il est autorisé il peut ou pas faire certaines actions (edit, create, lecture...) par exemple le bouton edit apparaît ou pas sur cette page.

    je rajoute: si il n'est pas autorisé d'editer sur la page1 il peut très bien être autorisé d'editer sur la page 2



    par exemple :
    -----------------------------------------------------------------------------------------------------------------------------------
    ....................... page1 ................. page2 ................. page3 .................. page4 .................... page5
    -----------------------------------------------------------------------------------------------------------------------------------
    ACCES.................*...........................*..............................*..........................................................
    -----------------------------------------------------------------------------------------------------------------------------------
    EDITION..............*...........................*........................................................................................
    -----------------------------------------------------------------------------------------------------------------------------------
    CREATION...........*...........................................................*.............................*..............................*
    -----------------------------------------------------------------------------------------------------------------------------------
    LECTURE............*............................*............................................................*...............................*
    -----------------------------------------------------------------------------------------------------------------------------------

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 168
    Points : 219
    Points
    219
    Par défaut
    Un voter qui testerait l'user pour la request, non ?

    En gros tu passes ton repository, la request_stack et le router a ton voter et là tu pourras matcher que l'user a le role pour la page en allant chercher l'info dans ta table.

  17. #17
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    désolé, je ne comprends pas.

    je ne vois pas quel objet lui filer....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        if (!$this->get('security.context')->isGranted('OWNER', $???OBJET???????)) {
            throw new AccessDeniedException();
        }

  18. #18
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 168
    Points : 219
    Points
    219
    Par défaut
    Dans la config du service

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    services:
        security.access.editor_voter:
            class:      TonApp\EditorBundle\Security\Authorization\Voter\EditorVoter
            arguments:  [@request_stack, @router, @ton_repo_ou_doctrine]
            tags:
                -       { name: security.voter }
            public:     false
    Si tu as la request, le Router et ton Repo tu n'as plus qu'a faire ton test dans la méthode vote .

    (et tu n'as pas besoin de passé d'objet lors de ton isGranted)

  19. #19
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    ok je vois mieux la démarche maintenant.

    te remercie pour tout cela.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Questions sur les rôles
    Par JackylRadis dans le forum SSAS
    Réponses: 2
    Dernier message: 04/06/2012, 11h15
  2. [UC] Clarification sur les rôles utilisateurs / Questions générales
    Par MakaveliFr dans le forum Cas d'utilisation
    Réponses: 5
    Dernier message: 08/11/2007, 09h27
  3. Question sur les rôles
    Par freud dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 01/10/2007, 11h24
  4. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo