我已安装SonataAdminBundle并配置它管理我的实体, 但是我有2个管理员角色:ROLE_ADMIN和ROLE_SUPER_ADMIN和我 想要限制对ROLE_ADMIN的某些管理服务的访问, 我在security.yml文件中使用它:
access_control:
- { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/ads, roles: ROLE_SUPER_ADMIN }
- { path: ^/admin, roles: ROLE_ADMIN }
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
当使用ROLE_ADMIN的用户点击管理广告时,它的工作非常完美
链接,他将在Access denied页面,但我想在菜单中隐藏此链接
在顶部导航和仪表板页面中,我是如何做到这一点的?
感谢
答案 0 :(得分:2)
SonataAdminBundle的默认安全处理程序是NOOP实现,它始终返回true。您必须change the security configuration管理包。
使用基于角色的安全处理程序,您必须将角色添加到security.yml config as described here。对于每个管理类,您必须在角色层次结构中添加到基础角色的角色数。如果您的管理类的ID为my_bundle.admin.object
和my_bundle.admin.protected_object
:
security:
role_hierarchy:
ROLE_SUPER_ADMIN:
- ROLE_USER
- ROLE_ADMIN
- ROLE_ALLOWED_TO_SWITCH
- ROLE_MY_BUNDLE_ADMIN_PROTECTED_OBJECT_LIST
- ROLE_MY_BUNDLE_ADMIN_PROTECTED_OBJECT_EDIT
....
ROLE_ADMIN:
- ROLE_USER
- ROLE_SONATA_USER_ADMIN_USER_EDIT
- ROLE_SONATA_USER_ADMIN_USER_LIST
- ROLE_MY_BUNDLE_ADMIN_OBJECT_LIST
- ROLE_MY_BUNDLE_ADMIN_OBJECT_EDIT
...
您可能必须将所有管理/操作组合枚举为角色。如果你有大量的管理类,也许基于RoleSecurityHandler实现自定义安全处理程序是更好的选择。
注意我不太了解symfony中的ACL,也不了解AclSecurityHandler。
答案 1 :(得分:0)
执行以下操作:
{% if is_granted('ROLE_ADMIN') %}
<li><a href="{{ path('zayso_natgames_admin') }}">Admin</a></li>
{% endif %}
如果这些模板位于Sonata套件中,那么您需要在app目录中覆盖它们。