在使用SonataAdminBundle时,你希望让不同权限的用户显示不同的菜单,例如你有一个微商,新闻管理人员只能够管理新闻,配送人员只能看到相关配送的功能。
注意:此内容不包括ACL权限,也就是说用户虽然看不到不相关的菜单,但是他如果知道url路径他还是可以浏览并管理页面的,如果你有严格要求,你还需要配置ACL,否则会给安全带来隐患。
方法很简单:
你只需要在config.yml的sonata配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
sonata_admin: title: 后台管理系统 dashboard: groups: contactus: label: 联系信息 items: - app.admin.contactus news: label: 新闻 items: - app.admin.news roles: [ ROLE_ADMIN_CONTENT, ROLE_SUPER_ADMIN ] |
我们定义了两个groups。一个是网站中的联系信息管理和一个新闻管理,允许ROLE_ADMIN_CONTENT和ROLE_SUPER_ADMIN访问。
实例中的(contactus和news) : 自定义不要重复sonata作为识别符
label: 你定义控制面板区块的标题名称(例如 news 的label为新闻)
items:很重要是你自己定义的admin类,也就是你在AppBundle\Resources\config\admin.xml中定义的服务id,已新闻为例
1 2 3 4 5 6 7 8 9 10 |
<service id="app.admin.news" class="AppBundle\Admin\NewsAdmin"> <tag name="sonata.admin" manager_type="orm" group="新闻管理" label="资讯" label_translator_strategy="sonata.admin.label.strategy.underscore" /> <argument /> <argument>AppBundle\Entity\News</argument> <argument>AppBundle:NewsAdmin</argument> <call method="setTranslationDomain"> <argument>AppBundle</argument> </call> </service> |
roles: 你上面的配置允许什么角色访问呢。ROLE_SUPER_ADMIN是你必须要加入的否则他不会显示左侧菜单。