gpt4 book ai didi

Symfony FosUserBundle 仅显示角色 == ROLE_USER 的用户

转载 作者:行者123 更新时间:2023-12-02 17:01:40 27 4
gpt4 key购买 nike

我试图只获取 ROLE_USER 的用户.

我的 Controller 中有这个:

$query = $this->getDoctrine()->getEntityManager()
->createQuery(
'SELECT u FROM StageUserBundle:User u WHERE u.roles LIKE :role'
)->setParameter('role', '%"ROLE_USER"%'
);
$users = $query->getResult();

它与 ROLE_ADMIN 一起工作而不是ROLE_USER但我只需要显示 User.getRoles()== "ROLE_USER" .

最佳答案

您的问题是 FOSUserBundle 中的用户模型实际上从未具有 ROLE_USER

FOS\UserBundle\Model\UserInterface

const ROLE_DEFAULT = 'ROLE_USER';

FOS\UserBundle\模型\用户

public function addRole($role)
{
$role = strtoupper($role);
if ($role === static::ROLE_DEFAULT) {
return $this;
}

if (!in_array($role, $this->roles, true)) {
$this->roles[] = $role;
}

return $this;
}

....

public function getRoles()
{
$roles = $this->roles;

foreach ($this->getGroups() as $group) {
$roles = array_merge($roles, $group->getRoles());
}

// we need to make sure to have at least one role
$roles[] = static::ROLE_DEFAULT;

return array_unique($roles);
}

当您getRoles时,它会添加ROLE_USER作为默认角色,当您addRole时,它会检查该角色是否为ROLE_USER ,如果是则跳过。

实际上,系统上的每个用户都会拥有ROLE_USER,因此要查找具有该角色的所有用户,您只需执行SELECT u FROM StageUserBundle:User u即可。

关于Symfony FosUserBundle 仅显示角色 == ROLE_USER 的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25187471/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com