我目前正在尝试围绕 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]
希望它可以帮助你。
UPDATE#1:
它是用Acl
. 您可以根据需要创建许多 acl(例如Class
、ClassField
、Object
)。每个Acl
forDomain
都有一个或多个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
allow toEDIT
和VIEW
this Domain
。但ROLE_BRONZE
只允许VIEW
。
在你的Controller
你可以检查权限。详细见这个例子。
UPDATE#2: 要授予某些权限,请使用MaskBuilder。