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 :

Dépendances entre types d'utilisateurs, comment faire?


Sujet :

Symfony PHP

  1. #1
    Membre habitué Avatar de Soobook
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Réunion

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2005
    Messages : 98
    Points : 149
    Points
    149
    Par défaut Dépendances entre types d'utilisateurs, comment faire?
    Bonjour à tous.

    C'est un problème de conception qui m'amène, si quelqu'un peut aider la lumière à jaillir dans mes méninges, ce serait top!

    J'ai deux types d'utilisateurs : Responsable et Assistant. La plupart des ressources de l'appli (clients, règlements, produits, ...) dépendent du Responsable.
    Lorsqu'un utilisateur se connecte, un Responsable doit être sélectionné pour la session en cours et être accessible de partout (comme l'utilisateur en cours).

    Lorsque c'est un Responsable qui se connecte, c'est facile puisqu'il s'agit de lui même, mais lorsqu'un Assistant se connecte, il faut qu'il soit systématiquement redirigé vers une page de sélection du Responsable tant qu'il n'en a pas choisi un.

    Pour plus de clarté, je poste juste après comment j'aborde la chose, mais pour l'instant j'arrive pas à modéliser tout ça correctement.

    Note : pour l'instant j'utilise FOSUserBundle et PUGXMultiUserBundle pour gérer mes utilisateurs, mais je ne suis pas sur que ce soit la bonne solution. J'ai d'ailleurs ouvert une question à ce sujet sur le forum (ICI).
    Javascript est la pornstar des langages de programmation : souple, puissant, tu lui fais faire ce que tu veux, et ça peut finir bien crade.
    ---
    https://www.bgaze.fr

  2. #2
    Membre habitué Avatar de Soobook
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Réunion

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2005
    Messages : 98
    Points : 149
    Points
    149
    Par défaut Voici comment j'aborde la chose :
    Je pourrais créer mes entités comme ceci (je poste que l'essentiel) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    class Responsable {
     
        public function hasResponsable() {
            return true;
        }
     
        public function getResponsable() {
            return $this;
        }
     
    }
     
    class Assistant {
     
        private $responsable;
     
        public function hasResponsable() {
            return ($this->responsable instanceof Responsable);
        }
     
        public function setResponsable(Responsable $responsable) {
            return $this->responsable = $responsable;
        }
     
        public function getResponsable() {
            return $this->responsable;
        }
     
    }
    Puis créer un service qui contrôle, à chaque accès à l'application, si l'utilisateur connecté a un responsable (hasResponsable). Si oui, la requête est traitée normalement, sinon :
    • l'url demandée est "mise en cache".
    • l'utilisateur est redirigé vers la page de sélection du Responsable.
    • celui-ci sélectionné, l'utilisateur est redirigé vers la page d'origine.


    Ainsi je pourrais accéder de partout à mon Responsable via l'utilisateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // PHP :
    $container->get('security.context')->getToken()->getUser()->getResponsable();
     
    // Twig :
    {{ app.user.responsable }}
    Mais c'est au niveau du service que je bloque :
    • Comment intercaler mon service, à chaque accès à l'appli, entre la réception de la requête et son traitement? J'ai pensé à un EventListener, mais sur quel événement?
    • Comment mettre en cache l'url d'origine.


    Voilà. Qu'en pensez-vous?
    Javascript est la pornstar des langages de programmation : souple, puissant, tu lui fais faire ce que tu veux, et ça peut finir bien crade.
    ---
    https://www.bgaze.fr

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2009
    Messages : 126
    Points : 183
    Points
    183
    Par défaut
    Salut

    Je ne vois pas trop l'utilité du bundle PUGX

    Voici une idée parmis tant d'autres :
    - étend fosUser
    - gère les cas responsable / assistant ... avec les roles
    - gere la redirection au niveau d'un manager comme dans cette doc :
    http://symfony.com/doc/2.0/cookbook/..._services.html

    t'en penses quoi ?

  4. #4
    Membre habitué Avatar de Soobook
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Réunion

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2005
    Messages : 98
    Points : 149
    Points
    149
    Par défaut
    Mes utilisateurs ont des profils assez différents : pour l'Assistant seul le login, nom, prénom et mot de passe sont nécessaires, tandis que le Responsable a beaucoup plus d'informations. D'où PUGX, qui me permet d'avoir plusieurs classes utilisateur avec FOSUserBundle.

    J'ai étudié le lien que tu m'a fourni. Par contre je vois pas trop comment utiliser les rôles / managers pour forcer mon utilisateur, s'il est un Assistant, à choisir pour quel Responsable il bossera au cours de cette session.
    Il est possible de sécuriser une action (sendNewsletter dans la doc), mais au final c'est l'ensemble de l'appli qui doit être sécurisée dans mon cas...

    De plus j'ai besoin d'accéder de partout au Responsable en cours, puisque ce sont surtout ses infos que je vais utiliser dans toute l'appli.

    En tout cas, merci de te pencher sur mon problème matlow. Ça fait un moment que j'y réfléchis mais je sèche.
    Javascript est la pornstar des langages de programmation : souple, puissant, tu lui fais faire ce que tu veux, et ça peut finir bien crade.
    ---
    https://www.bgaze.fr

Discussions similaires

  1. quel type champs et comment faire un formulaire
    Par kitcarson23 dans le forum Langage
    Réponses: 1
    Dernier message: 07/09/2010, 10h34
  2. Interface utilisateur, comment faire ?
    Par Jeremiaw dans le forum Débuter
    Réponses: 2
    Dernier message: 10/07/2008, 14h32
  3. Réponses: 1
    Dernier message: 25/01/2008, 14h44
  4. Plusieurs utilisateurs, comment faire ?
    Par martonpylon12 dans le forum Access
    Réponses: 3
    Dernier message: 12/09/2006, 17h09
  5. Enlever ma sécurité utilisateur... Comment faire?
    Par beletteroi dans le forum Sécurité
    Réponses: 1
    Dernier message: 06/12/2005, 23h33

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