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_FULLY
、IS_AUTHENTICATED_REMEMBERED
、IS_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(例如 Class
、ClassField
、Object
)。
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
允许EDIT
和VIEW
这个Domain
。但是ROLE_BRONZE
只允许VIEW
。
在您的Controller
中,您可以查看权限。详情见example。
更新#2: 要授予某些权限,请使用MaskBuilder。
【讨论】:
谢谢。但是,我仍然不明白角色与权限的关系。例如。您声明 ROLE_BRONZE,例如,它在哪里说明具有 ROLE_BRONZE 的人实际上能够做什么?以上是关于Symfony 安全角色的主要内容,如果未能解决你的问题,请参考以下文章
Symfony 2.1.7 - 用户通过身份验证后更新安全令牌设置特定角色