相关疑难解决方法(0)

如何在Symfony2中使用AccessDecisionManager来授权任意用户?

我希望能够验证属性(角色)是否被授予UserInterface在Symfony2中实现的任何任意对象.这可能吗?

UserInterface->getRoles() 不适合我的需要,因为它不考虑角色层次结构,我宁愿不重新发明该部门的轮子,这就是为什么我想尽可能使用Access Decision Manager.

谢谢.

为了回应下面的Olivier解决方案,以下是我的经验:

您可以将security.context服务与isGranted方法一起使用.您可以传递第二个参数,它是您的对象.

$user = new Core\Model\User();
var_dump($user->getRoles(), $this->get('security.context')->isGranted('ROLE_ADMIN', $user));
Run Code Online (Sandbox Code Playgroud)

输出:

array (size=1)
  0 => string 'ROLE_USER' (length=9)

boolean true
Run Code Online (Sandbox Code Playgroud)

我的角色层次:

role_hierarchy:
    ROLE_USER:          ~
    ROLE_VERIFIED_USER: [ROLE_USER]
    ROLE_ADMIN:         [ROLE_VERIFIED_USER]
    ROLE_SUPERADMIN:    [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
    ROLE_ALLOWED_TO_SWITCH: ~
Run Code Online (Sandbox Code Playgroud)

我的UserInterface->getRoles()方法:

public function getRoles()
{
    $roles = [$this->isVerified() ? 'ROLE_VERIFIED_USER' : 'ROLE_USER'];

    /**
     * @var UserSecurityRole $userSecurityRole
     */
    foreach ($this->getUserSecurityRoles() as $userSecurityRole) {
        $roles[] = $userSecurityRole->getRole();
    }

    return $roles;
}
Run Code Online (Sandbox Code Playgroud)

ROLE_ADMIN必须明确分配,但即使用户刚刚创建并且尚未分配除默认值以外的任何角色,也会isGranted('ROLE_ADMIN', $user)返回,只要授予当前登录用户.这使我相信到第二个参数只是忽略的是,提供给被代替.TRUE …

php access-control symfony

12
推荐指数
2
解决办法
9226
查看次数

授予其他用户

在我阅读了食谱中的这一章之后

http://symfony.com/doc/current/cookbook/security/entity_provider.html

我创建了一个实现“AdvancedUserInterface”的实体“User”和一个实现“RoleInterface”的实体“Roles”。我还在“security.yml”中创建了一个角色结构。

用户和角色之间的关系是“多对多”关系。

一切安好。

对于登录用户,我可以检查这样的授权:

$this->get('security.context')->isGranted("ROLE_EDITOR");
Run Code Online (Sandbox Code Playgroud)

但是如何检查数据库中其他用户的此授权?

有像吗?

$this->get('security.context')->isGranted("ROLE_EDITOR", $user);
Run Code Online (Sandbox Code Playgroud)

symfony

6
推荐指数
1
解决办法
2244
查看次数

标签 统计

symfony ×2

access-control ×1

php ×1