我正在使用Symfony2和FOSUserBundle。我需要为用户发挥最高的作用。
ROLE_SUPER_ADMIN
如果用户拥有角色ROLE_CONTRIBUTOR
和$user->getHighestRole()
,我需要一个像ROLE_SUPER_ADMIN
这样的方法返回getHighestRole()
。我需要在User实体中完成它,因为我正构建一个Rest API,并且我希望将security.yml
方法公开为一个字段。
我不想在AppBundle\Entity\User.php
和security.role_hierarchy
中提供有关角色的冗余信息。我可以访问实体中的OnClick
吗?
我甚至不确定角色是否最高,因为角色可以包含任何其他角色。 你有任何我可以追随的线索吗?
答案 0 :(得分:4)
您决定哪个是最高的"角色,所以你可以在你的用户实体中做一些类似的事情:
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?
}
答案 1 :(得分:1)
您可以从容器中获取role_hierarchy,如:
但由于实体类应该保留POPO,因此容器识别不是一个好主意
use Symfony\Component\Yaml\Parser;
$yaml = new Parser();
$arrayOfOptions = $yaml->parse(file_get_contents('/path/to/security.yml'));
替代方法,您可以使用
读取yml文件{{1}}