根据角色显示仪表板组(不包含acl组)

时间:2015-07-02 12:43:47

标签: php symfony roles sonata-admin sonata

我试图在信息中心上显示多个部分,具体取决于用户登录的角色。

我不使用ACL组或类似的东西。我只是在我的security.yml:

role_hierarchy:
    ROLE_COMPANY:     ROLE_USER
    ROLE_ADMIN:       [ROLE_COMPANY, ROLE_USER]
    ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

我可以在列表视图中登录并显示数据(作业示例概述),具体取决于登录用户的角色。

现在,我希望在登录用户不是管理员时隐藏仪表板上的某个部分。

在我的admin.yml中我有:

services:
    sonata.admin.jobs:
        class: MyBundleName\Admin\JobAdmin
        tags:
            - { name: sonata.admin, manager_type: orm, group: "Job Manager", label: "Jobs", roles: ROLE_ADMIN }
        arguments:
            - ~
            - MyBundleName\Entity\Job
            -
        calls:
            - [ setTranslationDomain, [MyBundleName]]
            - [ setTemplate, [show, MyBundleName:Job:base_show.html.twig]]

    sonata.admin.applications:
        class: MyBundleName\Admin\ApplicationAdmin
        tags:
            - { name: sonata.admin, manager_type: orm, group: "Job Manager", label: "Applications" }
        arguments:
            - ~
            - MyBundleName\Entity\Application
            -
        calls:
            - [ setTranslationDomain, [MyBundleName]]

    sonata.admin.categories:
        class: MyBundleName\Admin\CategoryAdmin
        tags:
            - { name: sonata.admin, manager_type: orm, group: "Job Extra", label: "Categories" }
        arguments:
            - ~
            - MyBundleName\Entity\Category
            -
        calls:
            - [ setTranslationDomain, [MyBundleName]]

    sonata.admin.skills:
        class: MyBundleName\Admin\SkillAdmin
        tags:
            - { name: sonata.admin, manager_type: orm, group: "Job Extra", label: "Skills" }
        arguments:
            - ~
            - MyBundleName\Entity\Skill
            -
        calls:
            - [ setTranslationDomain, [MyBundleName]]

正如你所看到我有2个小组"工作经理"和" Job Extra"。我想隐藏这个小组" Job extra"如果登录用户不是管理员。 但是最简单的方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用以下方法直接在Twig中检查您的用户角色:

{% if is_granted('ROLE_USER') %} <div>Only show this<div> {% endif %}