代码之家  ›  专栏  ›  技术社区  ›  Pierre de LESPINAY

Symfony 2-Sonata管理员基于角色的安全性

  •  0
  • Pierre de LESPINAY  · 技术社区  · 12 年前

    对于索纳塔,我正在尝试使用基于角色的安全性。

    我想给一个小组,列出,编辑和编辑的权利;创建用户,所以我创建了一个角色

    ROLE_MANAGE_USERS:
        - ROLE_SONATA_USER_ADMIN_USER_EDIT
        - ROLE_SONATA_USER_ADMIN_USER_LIST
        - ROLE_SONATA_USER_ADMIN_USER_CREATE
    

    这很好,但根据 doc ,我理解一个用户

    ROLE_SONATA_USER_STAFF
    

    应该已经继承的权利 [EDIT, LIST, CREATE] ,但事实似乎并非如此

    我也试过

    ROLE_SONATA_USER_ADMIN_USER_STAFF
    

    有什么我误解的吗?

    1 回复  |  直到 12 年前
        1
  •  1
  •   Guillermo Gutiérrez    11 年前

    我想事实并非如此。首先,要编辑的主要角色的名称取决于服务名称。例如,如果管理员的服务是 sonata.user.admin ,则角色将是,例如:

    ROLE_SONATA_USER_ADMIN_LIST
    ROLE_SONATA_USER_ADMIN_VIEW
    

    正如你所看到的,前缀总是 ROLE (symfony 2要求),然后是服务名称(但用下划线和所有大写字母交换点),并以特定权限的前缀结束:

    • LIST:查看对象列表
    • VIEW:查看一个对象的详细信息
    • CREATE:创建一个新对象
    • 编辑:更新现有对象
    • DELETE:删除现有对象
    • 出口:(用于本地索纳塔出口链接)

    据我所知,没有为编辑、列出和创建预定义ROLE_SONATA_USER_STAFF。但是,您可以在security.yml文件的层次结构中定义它:

    security:
        role_hierarchy:
            # Setting up 
            ROLE_SONATA_USER_STAFF:
                - ROLE_SONATA_USER_ADMIN_EDIT
                - ROLE_SONATA_USER_ADMIN_LIST
                - ROLE_SONATA_USER_ADMIN_CREATE
            # using the staff role to create new roles
            ROLE_MANAGE_USERS:             [ROLE_SONATA_USER_STAFF]