Symfony4-MakerBundle:如何按角色查找所有用户?

时间:2019-06-06 12:57:46

标签: symfony4

我想让用户中的所有管理员(即具有ROLE_ADMIN角色)。

属性角色是“ json”,所以我认为我不能使用“ like”或“ =”运算符。

我在symfony4项目中使用MakerBundle实现了用户管理(make:user然后make:auth命令)。

selectedId

当我在控制器中调用class User implements UserInterface { /** * @ORM\Column(type="json") */ private $roles = []; } class UserRepository extends ServiceEntityRepository { public function findByRole($role){ return $this->createQueryBuilder('u') ->where("u.roles like :role ") ->setParameter('role', '%'.$role.'%') ->getQuery() ->getResult(); } } class MyController extends AbstractController { public function edit(UserRepository $userRepository): Response { $admins = $userRepository->findByRole('ROLE_ADMIN'); dump($admins); exit; } } 时,错误消息是:

findByRole('ROLE_ADMIN')

我还尝试使用scienta / doctrine-json-functions(https://packagist.org/packages/scienta/doctrine-json-functions),但无法修复。

1 个答案:

答案 0 :(得分:0)

我找到的解决方案基于https://www.remipoignon.fr/symfony-comment-verifier-le-role-dun-utilisateur-en-respectant-la-hierarchie-des-roles/(对不起,这是一篇法国文章)

我创建了GrantedService,然后在我的控制器中:

public function edit(UserRepository $userRepository){
        foreach($userRepository->findAll() as $user){
            if( $grantedService->isGranted($user, 'ROLE_ADMIN') ){
                //do something...
            }
        }
}

对于我当前的用户很少的项目,可以。但是我还有其他具有数千个用户的项目,我知道findall()然后测试全部不是一个好习惯。所以稍后我将不得不解决此问题