Каркас Symfony; идиоматический способ хранения роли пользователя

В моем приложении Symfony 2 я хочу использовать стандартную систему авторизации пользователей и ролей (http://symfony.com/doc/2.0/book/security.html)

Мой пользователь — это сущность, хранящаяся в базе данных с доктриной (реализующей пользовательский интерфейс). В моей системе будет 5 предопределенных ролей, и у каждого пользователя может быть несколько таких ролей.

Как бы это реализовать наиболее идиоматично? Я думаю о следующих трех решениях.

  1. Создайте отдельный объект роли и создайте отношение «многие ко многим» с объектом пользователя

    • Плюс: легко получить всех пользователей с определенной ролью
    • Против: ресурсоемкий? (Всегда требуется двойное соединение, чтобы получить все роли для пользователя)
    • Минус: Не idomatic? Количество ролей (и их имена) никогда не меняется, поэтому есть ли смысл хранить их в базе данных как отдельный объект?
  2. Имейте поле внутри пользователя, которое представляет собой отсортированный список ролей, разделенных запятыми, и getRoles( ) реализован как explode(',',this.all_roles)

    • Плюс: не требует больших вычислительных ресурсов
    • Минус: трудно получить всех пользователей с определенной ролью
    • Минус: такие поля базы данных делают котят cry (нормализация и прочее)
  3. Иметь 5 бинарных полей в объекте пользователя для каждой роли

    • Плюс: Не требует больших вычислительных ресурсов
    • Плюс: Легко получить всех пользователей с определенной ролью
    • Минус: Это по-прежнему не работает нехорошо

Какой самый идиоматический способ реализации этой системы?

8
задан Sgoettschkes 11 March 2012 в 10:44
поделиться