在Symfony2中获得最高用户角色

时间:2015-07-28 13:53:40

标签: symfony fosuserbundle roles

我正在使用Symfony2和FOSUserBundle。我需要为用户发挥最高的作用。

ROLE_SUPER_ADMIN

如果用户拥有角色ROLE_CONTRIBUTOR$user->getHighestRole(),我需要一个像ROLE_SUPER_ADMIN这样的方法返回getHighestRole()。我需要在User实体中完成它,因为我正构建一个Rest API,并且我希望将security.yml方法公开为一个字段。 我不想在AppBundle\Entity\User.phpsecurity.role_hierarchy中提供有关角色的冗余信息。我可以访问实体中的OnClick吗?

我甚至不确定角色是否最高,因为角色可以包含任何其他角色。 你有任何我可以追随的线索吗?

2 个答案:

答案 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}}