Как скрыть ссылки на странице панели инструментов на ROLE ADMIN и показать его на ROLE_SUPER_ADMIN? - PullRequest
0 голосов
/ 22 февраля 2012

Я установил SonataAdminBundle и настроил его для управления моими сущностями, однако у меня есть 2 роли администратора: ROLE_ADMIN и ROLE_SUPER_ADMIN, и я хотите ограничить доступ к некоторым службам администратора для ROLE_ADMIN, Я использую это в файле security.yml:

access_control: 
        - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
        - { path: ^/admin/ads, roles: ROLE_SUPER_ADMIN } 
        - { path: ^/admin, roles: ROLE_ADMIN } 
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 

это отлично работает, когда пользователь с ROLE_ADMIN нажимает на управление рекламой ссылка, он будет на странице Доступ запрещен, но я хочу скрыть эту ссылку в меню в верхней части Nav и на странице Dashboard, как мне это сделать? Спасибо

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Обработчиком безопасности по умолчанию для SonataAdminBundle является реализация NOOP, которая всегда возвращает true. Вы должны изменить конфигурацию безопасности пакета администратора.

С помощью обработчика безопасности на основе ролей вы должны добавить роли в конфигурацию security.yml , как описано здесь . Для каждого класса администратора есть номер роли, которую вы должны добавить к своей базовой роли в иерархии ролей. Если у вас есть класс администратора с идентификатором my_bundle.admin.object и my_bundle.admin.protected_object:

security:
  role_hierarchy:
    ROLE_SUPER_ADMIN: 
      - ROLE_USER
      - ROLE_ADMIN
      - ROLE_ALLOWED_TO_SWITCH
      - ROLE_MY_BUNDLE_ADMIN_PROTECTED_OBJECT_LIST
      - ROLE_MY_BUNDLE_ADMIN_PROTECTED_OBJECT_EDIT
      ....
    ROLE_ADMIN:
      - ROLE_USER
      - ROLE_SONATA_USER_ADMIN_USER_EDIT
      - ROLE_SONATA_USER_ADMIN_USER_LIST
      - ROLE_MY_BUNDLE_ADMIN_OBJECT_LIST
      - ROLE_MY_BUNDLE_ADMIN_OBJECT_EDIT
      ...

Возможно, вам придется перечислить все комбинации администратор / действие в качестве ролей. Может быть, реализация собственного обработчика безопасности на основе RoleSecurityHandler будет лучшим выбором, если у вас большое количество классов администратора.

Примечание Я не знаю слишком много ни о ACL-списках в symfony, ни о AclSecurityHandler.

0 голосов
/ 23 февраля 2012

в вашем шаблоне, сделайте что-то вроде:

{% if is_granted('ROLE_ADMIN') %}
    <li><a href="{{ path('zayso_natgames_admin') }}">Admin</a></li>
{% endif %}

Если эти шаблоны находятся в комплекте Sonata, вам нужно переопределить их в каталоге вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...