Вопросы, связанные с ролями в Symfony - PullRequest
0 голосов
/ 17 февраля 2012

В моем проекте много ролей: админ, HR, менеджер, сотрудник.Как мне реализовать это обобщенным образом в Symfony2, чтобы в будущем можно было добавлять новые роли?

1 Ответ

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

Symfony2 представляет аутентифицированных пользователей, использующих интерфейс UserInterface.

Этот интерфейс просит вас реализовать метод getRoles, который возвращает все роли, которые имеет пользователь.

В зависимости от того, какВы реализуете этот UserInterface, вы можете получить эти роли из базы данных, веб-службы или чего угодно.

Одним простым способом предоставления этих пользователей является поставщик in-memory:

# app/config/security.yml
security:
    # ...
    providers:
        in_memory:
            users:
                ryan:  { password: bb87a29949f3a1ee0559f8a57357487151281386, roles: 'ROLE_USER' }
                admin: { password: 74913f5cd5f61ec0bcfdb775414c2fb3d161b620, roles: [ 'ROLE_ADMIN', 'ROLE_RH'] }

Другой способ - использовать EntityProvider .Для получения более подробной информации смотрите эту запись поваренной книги .

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

Вы даже можете определить иерархию ролей:

# app/config/security.yml
security:
    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

Так что любой пользователь, имеющий роль ROLE_ADMIN, также унаследовал рольROLE_USER.

Для получения дополнительной информации посмотрите документы .

...