Symfony 安全角色

Posted

技术标签:

【中文标题】Symfony 安全角色【英文标题】:Symfony security roles 【发布时间】:2013-10-18 00:39:19 【问题描述】:

我目前正在尝试围绕 Symfony 安全,尤其是 ACL。我一直在阅读各种文档,并且 ACL 角色和权限似乎很重要。

但是,我不明白这些角色和权限是在哪里定义的。例如。文档中有一小部分关于角色 [1] 但在此示例中,ROLE_USER 来自哪里?此外,角色如何封装权限,例如,在 Symfony 应用程序中,角色和权限之间的这种关系是在哪里定义的?

[1]http://symfony.com/doc/master/book/security.html#roles

【问题讨论】:

【参考方案1】:

此处定义了内置的特殊角色(IS_AUTHENTICATED_FULLYIS_AUTHENTICATED_REMEMBEREDIS_AUTHENTICATED_ANONYMOUSLY):AuthenticatedVoter。

您应该在app/config/security.yml 中以层次结构形式定义的所有其他角色。例如:

security:
    acl:
        connection: default
    # ...
    role_hierarchy:
        ROLE_SILVER: [ROLE_BRONZE]
        ROLE_GOLD: [ROLE_SILVER]
        ROLE_PLATINUM: [ROLE_GOLD]
        ROLE_ADMIN: [ROLE_PLATINUM, ROLE_ALLOWED_TO_SWITCH]

希望对你有帮助。

更新#1: 它是用Acl 实现的。您可以根据需要创建许多 acl(例如 ClassClassFieldObject)。 Domain 的每个 Acl 都有一个或多个 Entries 喜欢:

Entry#1: User with 'ROLE_BRONZE' allow to 'VIEW' this `Domain`
Entry#2: User with 'ROLE_SILVER' allow to 'EDIT' this `Domain`

等等

所以根据role_hierarchy ROLE_SILVER 允许EDITVIEW 这个Domain。但是ROLE_BRONZE 只允许VIEW

在您的Controller 中,您可以查看权限。详情见example。

更新#2: 要授予某些权限,请使用MaskBuilder。

【讨论】:

谢谢。但是,我仍然不明白角色与权限的关系。例如。您声明 ROLE_BRONZE,例如,它在哪里说明具有 ROLE_BRONZE 的人实际上能够做什么?

以上是关于Symfony 安全角色的主要内容,如果未能解决你的问题,请参考以下文章

没有任何角色的 Symfony 安全用户

Symfony 2.1.7 - 用户通过身份验证后更新安全令牌设置特定角色

如果安全拒绝某个角色的访问,则在 Symfony3 中触发一个 Jquery 函数

Symfony2 在 Twig 中获取用户角色

Symfony:角色管理上的“数组到字符串转换”错误

Symfony - 安全/路由设置以启用受密码保护的用户页面