我已经安装了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时,他将进入访问被拒绝页面,但我想在顶部导航和仪表板页面的菜单中隐藏此链接,我是怎么做到的?谢谢
2 回答
SonataAdminBundle的默认安全处理程序是NOOP实现,它始终返回true . 您必须change the security configuration的管理包 .
使用基于角色的安全性处理程序,您必须将角色添加到security.yml config as described here . 对于每个管理类,您必须在角色层次结构中添加到基础角色的角色数 . 如果您的管理类具有id
my_bundle.admin.object
和my_bundle.admin.protected_object
:您可能必须将所有管理/操作组合枚举为角色 . 如果你有大量的管理类,也许基于RoleSecurityHandler实现自定义安全处理程序是更好的选择 .
注意我不太了解symfony中的ACL,也不了解AclSecurityHandler .
在您的模板中,执行以下操作:
如果这些模板位于Sonata软件包中,那么您需要在app目录中覆盖它们 .