Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Symfony 4.4] Easy Admin - Role

Afficher une liste selon utilisateur connecté

Sujet résolu
    23 janvier 2020 à 10:18:43

    Bonjour a tous,

    travail actuellement sur un nouveau projet en utilisant le bundle EsayAdmin avec Symfony 4.4.

    C'est la premiere fois que j'utilise ce bundle, je suis pas encore alaise avec celui-ci.

    Il y as plusieurs utilisateurs qui pourront se connecter dessus avec des roles différents (ROLE_RH, ROLE_MANAGER, ROLE_COLLABORATOR). 

    J'ai une entité User où sont créer tous les utilisateurs (nom, prénom, email, mot de passe et le role).

    J'ai une autre entité GroupManager où  je peux attribué plusieurs collaborateurs à un manageur.

    Pour le role manager, dans le back office je voudrais afficher dans la liste collaborateurs uniquement les siens. 

    Actuellement, quand je me connect au back office avec un role manageur j'ai le listing de tous les manageurs et si je clique sur un manageur, j'ai un nouveau listing avec ses collaborateurs.

    Ce que je voudrais faire, c'est que quand un manageur se connecte, c'est qu'il voie uniquement c'est collaborateur. Donc supprimer la liste de tous les groupe manageur/collaborateurs et afficher uniquement la liste de ses collaborateur.

    Je sais pas comment m'y prendre, si je dois modifier un controller, ou directement l'entité GroupManger ?

    J’espère avoir été clair et je vous remercie d'avance pour votre aide . 


     J'ai un peut avancé, J'ai créé ne fonction dans controller qui extend EasyAdminController.

    Je voudrais filter ma requête en lui disant where manager_id (FK) = $idUser.

        protected function createListQueryBuilder($entityClass, $sortDirection, $sortField = null, $dqlFilter = null)
        {
            $idUser = $this->getIdUser();
            $list = parent::createListQueryBuilder($entityClass, $sortDirection, $sortField, $dqlFilter)
                ->where('entity.manager = :i'
                )->setParameter('i', 4);
    
    
            return $list;

    Mais j'ai une erreur :

    An exception has been thrown during the rendering of a template ("[Semantical Error] line 0, col 63 near 'manager = :i': Error: Class App\Entity\GroupManager has no field or association named manager").

    Comment faire svp ?

    Edit : J'ai résolu mon problème, je sais pas si c'est très propre mais ça marche :

        protected function getIdUser()
        {
            $user = parent::getUser();
            $userName = $user->getUsername();
            $em = $this->getDoctrine()->getRepository(User::class);
            $user = $em->findBy(['email' => $userName]);
            $idUser = $user[0]->getId();
    
            return $idUser;
        }
    
    
        protected function createListQueryBuilder($entityClass, $sortDirection, $sortField = null, $dqlFilter = null)
        {
            $idUser = $this->getIdUser();
            $user = parent::getUser();
            $user = $user->getRoles();
    
            if ($user[0] == 'ROLE_MANAGER') {
                $dqlFilter = sprintf('entity.Manager = %s', $idUser);
            }
    
            $list = parent::createListQueryBuilder($entityClass, $sortDirection, $sortField, $dqlFilter);
    
    
            return $list;
        }

    -
    Edité par JefDc 23 janvier 2020 à 12:47:13

    • Partager sur Facebook
    • Partager sur Twitter

    [Symfony 4.4] Easy Admin - Role

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown