使用 ROLES 而不是 ACL 管理 Sonata Admin
Managing Sonata Admin with ROLES instead of ACL
我对ACL
的理解非常有限,我对SonataAdminBundle
的使用也很简单,包括两个角色ADMIN
和SUPER_ADMIN
。
我的项目(查看、编辑、列表、删除)中不需要this复杂的ACL
。我想通过角色来确定对某个管理员或操作的访问权限。
这是一个好习惯吗:
- 在twig中使用默认的
is_granted('SUPER_ADMIN')
而不是admin.isGranted()
或admin.hasAccess()
?
- 在控制器或管理员中 class 使用
security.authorization_checker
isGranted()
?
如何确定哪个 ROLE
可以访问哪个页面?例如,在侧边栏中仅显示 SUPER_ADMIN
的某些管理页面并且不允许 ADMIN
.
访问
Sonata 角色方法定义每个管理员的角色 class,包括一个特殊角色 *_ALL
,授予对相关管理区域的完全访问权限,因此您可以将这些 *_ALL
分组在 [=您的 role_hierarchy
(security.yml
文件)中的 13=] 或 ROLE_SUPER_ADMIN
角色,例如:
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
,为其他用户分配 ROLE_SUPER_ADMIN
。甚至您也可以对特定操作执行一些子角色分组。
我对ACL
的理解非常有限,我对SonataAdminBundle
的使用也很简单,包括两个角色ADMIN
和SUPER_ADMIN
。
我的项目(查看、编辑、列表、删除)中不需要this复杂的ACL
。我想通过角色来确定对某个管理员或操作的访问权限。
这是一个好习惯吗:
- 在twig中使用默认的
is_granted('SUPER_ADMIN')
而不是admin.isGranted()
或admin.hasAccess()
? - 在控制器或管理员中 class 使用
security.authorization_checker
isGranted()
?
如何确定哪个 ROLE
可以访问哪个页面?例如,在侧边栏中仅显示 SUPER_ADMIN
的某些管理页面并且不允许 ADMIN
.
Sonata 角色方法定义每个管理员的角色 class,包括一个特殊角色 *_ALL
,授予对相关管理区域的完全访问权限,因此您可以将这些 *_ALL
分组在 [=您的 role_hierarchy
(security.yml
文件)中的 13=] 或 ROLE_SUPER_ADMIN
角色,例如:
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
,为其他用户分配 ROLE_SUPER_ADMIN
。甚至您也可以对特定操作执行一些子角色分组。