роли безопасности symfony2

Я хочу сделать это в файле security.yml:

access_control:
    - { path: ^/admin, roles: ROLE_ADMIN }
    - { path: ^/admin, roles: ROLE_EMPLEADO}

Это означает, что я хочу, чтобы две роли обращались к одному и тому же шаблону URL.

То, что я сделал, не работает, оно всегда дает разрешение только ROLE_ADMIN, и когда я обращаюсь к тому же URL-адресу с ROLE_EMPLEADO, он говорит, что доступ запрещен.

Как я могу этого добиться?


person Francisco Ochoa    schedule 07.03.2012    source источник


Ответы (2)


Вот как это сделать:

- { path: "^/admin", role: ["ROLE_ADMIN", "ROLE_EMPLEADO"] }

Это позволит обеим ролям получить доступ к одному и тому же URL-адресу.

person Matt    schedule 07.03.2012
comment
Спасибо. Как раз то, что мне было нужно :) - person Francisco Ochoa; 08.03.2012

Вы должны создать иерархию ролей (см. http://symfony.com/doc/2.0/book/security.html#hierarchical-roles)

security:
  roles_hierarchy:
    ROLE_EMPLEADO: ROLE_ADMIN

что в основном означает, что пользователь с ролью ROLE_EMPLEADO также имеет роль ROLE_ADMIN, и тогда достаточно сказать:

access_control:
    - { path: ^/admin, roles: ROLE_ADMIN }
person catalin.costache    schedule 07.03.2012
comment
Большое спасибо за ваш ответ :), но иерархические роли мне не подходят. Мне нужно эмплеадо, чтобы быть эмплеадо. Если я поставлю ROLE_EMPLEADO: ROLE_ADMIN, тогда empleado тоже будет администратором, и я не смогу иметь что-то вроде: напечатайте это, если вы empleado, или напечатайте это, если вы администратор, потому что empleado будет и тем, и другим. - person Francisco Ochoa; 08.03.2012