在Symfony2中获得最高用户角色
我用的是Symfony2和FOSUserBundle。我需要获得用户的最高角色在Symfony2中获得最高用户角色,symfony,fosuserbundle,roles,Symfony,Fosuserbundle,Roles,我用的是Symfony2和FOSUserBundle。我需要获得用户的最高角色 role_hierarchy: ROLE_CONTRIBUTOR: ROLE_USER ROLE_MODERATOR: ROLE_CONTRIBUTOR ROLE_ADMIN: ROLE_MODERATOR ROLE_SUPER_ADMIN: ROLE_ADMIN 如果用户具有角色ROLE\u SUPER\u ADMIN和ROLE\u
role_hierarchy:
ROLE_CONTRIBUTOR: ROLE_USER
ROLE_MODERATOR: ROLE_CONTRIBUTOR
ROLE_ADMIN: ROLE_MODERATOR
ROLE_SUPER_ADMIN: ROLE_ADMIN
如果用户具有角色ROLE\u SUPER\u ADMIN
和ROLE\u CONTRIBUTOR
,我需要一个类似$user->getHighestRole()
的方法,该方法将返回ROLE\u SUPER\u ADMIN
。我需要在用户实体内部完成,因为我正在构建一个RESTAPI,并且我想将getHighestRole()
方法作为字段公开。
我不想在security.yml
和AppBundle\Entity\User.php
中有关于角色的冗余信息。我可以访问实体中的安全.角色层次结构
我甚至不确定是否有最高级别的角色,因为一个角色可以包含任何其他角色。
你有什么线索我可以遵循吗?你是决定哪一个是“最高”角色的人,所以你可以在你的用户实体中简单地做这样的事情:
public function getHighestRole()
{
$rolesSortedByImportance = ['ROLE_SUPER_ADMIN', 'ROLE_ADMIN', 'ROLE_MODERATOR', 'ROLE_CONTRIBUTOR', 'ROLE_USER'];
foreach ($rolesSortedByImportance as $role)
{
if (in_array($role, $this->roles))
{
return $role;
}
}
return false; // Unknown role?
}
您可以从以下容器中获取角色\u层次结构:
但是,由于实体类应该保持POPO,所以最好不要使用容器感知
$container->getParameter('security.role_hierarchy.roles')
或者,您可以使用
use Symfony\Component\Yaml\Parser;
$yaml = new Parser();
$arrayOfOptions = $yaml->parse(file_get_contents('/path/to/security.yml'));
是的,这就是我所想的,我需要重复实体中的角色层次结构。是的,你需要,因为如果你想做一些更具动态性的事情,你需要在你的实体中注入容器,这有点难看。是的,注入容器是一个坏主意/做法。我不能使用管理器,正如我所说的,我需要返回entitycheck我的更新,也许你可以不使用Container手动解析选项值这将是一个解决方案,是的,但我认为我现在将坚持使用冗余信息。如果它引起问题,我们将在使用它的过程中