Symfony角色 - 如何设计?

时间:2015-10-13 12:38:43

标签: symfony roles

我正在尝试使用Voters实现一些场景,但我不确定这是否是一个好方法,所以让我解释一下。

我的申请分为frontofficebackoffice。前台主要是客户区,后台为管理团队。

所以我想在access_control(类似的东西)中扮演两个主要角色:

access_control:
    - { path: ^/.+/backoffice, roles: [ROLE_BACKOFFICE] }
    - { path: ^/.+/frontoffice, roles: [IS_AUTHENTICATED_ANONYMOUSLY, ROLE_FRONTOFFICE] }

根据这些角色,我们可以确定谁应该能够访问给定的链接。

现在,如果您访问backoffice,我必须能够确定用户应该看到哪个部分以及他对该部分的权限。

示例1:

ROLEROLE_MANAGER

SECTIONSECTION_CLIENTS, SECTION_REPORTS, SECTION_PROGRAMS, SECTION_SCHEDULE

PERMISSIONCAN_VIEW, CAN_CREATE, CAN_EDIT, CAN_DELETE

示例2:

ROLEROLE_INTERN

SECTIONSECTION_REPORTS

PERMISSIONCAN_VIEW

所有角色都应该通过界面管理,并且可以存储在数据库中。

我尝试使用Voters,但我试图像这样使用它:

$this->denyAccessUnlessGranted('view', 'SECTION_REPORTS' 'Unauthorized access!');

但是这是抱怨第二个参数必须是一个对象,所以报告只是一个视图,所以我不能传递字符串,我可以为此创建一个简单的对象,并将其传递给它:

    $this->denyAccessUnlessGranted('view', new SectionReport(), 'Unauthorized access!');

并在ReportsVoter类中执行所有必要的逻辑,但之后我将如何使用

在Twig中显示或隐藏菜单
    {% if is_granted('view', 'SECTION_REPORTS') %}
        <p>ACCESS GRNANTED</p>
    {% endif %}

我应该用自己的is_granted方法创建一个自定义的TwigExtension吗? 或者这个想法是完全错误的,我应该以不同的方式做到这一点?

我知道FOSUserBundle存在,但我不打算使用它,因为它包含太多配置,不需要。

还有一件事,配置面板看起来与此类似:

enter image description here

0 个答案:

没有答案