我对ACL
的理解非常有限,我对SonataAdminBundle
的使用非常简单,包括两个角色ADMIN
和SUPER_ADMIN
。
我的项目中不需要this复杂ACL
(VIEW,EDIT,LIST,DELETE)。我想确定该角色对某个管理员或行动的访问权限。
这是一个好习惯:
admin.isGranted()
或admin.hasAccess()
来使用默认的is_granted('SUPER_ADMIN')
?security.authorization_checker
isGranted()
?如何确定哪个ROLE
可以访问哪个页面?例如,仅在侧边栏中显示SUPER_ADMIN
的某些管理页面,且不允许ADMIN
访问。
答案 0 :(得分:1)
Sonata角色方法定义了每个管理类的角色,其中包含一个特殊角色*_ALL
,可授予对相关管理区域的完全访问权限,因此您可以将这些*_ALL
归为ROLE_ADMIN
或{{ 1}} ROLE_SUPER_ADMIN
(role_hierarchy
文件)中的角色,例如:
security.yml
遵循此继承方法,您可以为一些用户分配role_hierarchy:
ROLE_ADMIN:
- ROLE_USER
- ROLE_FOO_BUNDLE_BAR_ADMIN_ALL
- ROLE_FOO_BUNDLE_BAZ_ADMIN_ALL
# ...
ROLE_SUPER_ADMIN:
- ROLE_ADMIN
- ROLE_ALLOWED_TO_SWITCH
- ROLE_SU_BUNDLE_SU_ADMIN_ALL
# ...
,为其他用户分配ROLE_ADMIN
。即使您可以为特定操作执行一些角色子组。