【发布时间】:2013-10-18 00:39:19
【问题描述】:
我目前正在尝试围绕 Symfony 安全,尤其是 ACL。我一直在阅读各种文档,并且 ACL 角色和权限似乎很重要。
但是,我不明白这些角色和权限是在哪里定义的。例如。文档中有一小部分关于角色 [1] 但在此示例中,ROLE_USER 来自哪里?此外,角色如何封装权限,例如,在 Symfony 应用程序中,角色和权限之间的这种关系是在哪里定义的?
【问题讨论】:
我目前正在尝试围绕 Symfony 安全,尤其是 ACL。我一直在阅读各种文档,并且 ACL 角色和权限似乎很重要。
但是,我不明白这些角色和权限是在哪里定义的。例如。文档中有一小部分关于角色 [1] 但在此示例中,ROLE_USER 来自哪里?此外,角色如何封装权限,例如,在 Symfony 应用程序中,角色和权限之间的这种关系是在哪里定义的?
【问题讨论】:
此处定义了内置的特殊角色(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。
【讨论】: