Дизайн для пользовательской иерархии в Ruby on Rails - PullRequest
1 голос
/ 15 мая 2011

У меня есть приложение, требующее аутентификации, и модель пользователя.Существует 4 уровня авторизации со следующими правилами:

  1. Пользователи уровня 1 могут создавать / редактировать / удалять всех пользователей уровней 2,3 и 4.
  2. Пользователи уровня 2 могут создавать уровниПользователи 3 и 4, и редактируют только тех пользователей, которым они владеют.
  3. Уровни 3 и 4 не имеют прав для создания / редактирования / удаления пользователей.
  4. ОБНОВЛЕНИЕ: пользователи уровней 3 и 4 могут иметь несколькородительские пользователи уровня 2.

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

Существуют ли какие-либо шаблоны для работы с такой иерархией?использование плагина авторизации, такого как cancan , позволит мне определять различные уровни авторизации, но не отношения между различными пользователями.

По сути, мне бы хотелось, чтобы дизайн позволил мненаписать код контроллера, например:

@level_two_users = current_user.find_all_my_level_two_users

Спасибо

1 Ответ

1 голос
/ 15 мая 2011

Вы можете добавить атрибут level к вашей модели пользователя и метод для запроса разрешенных пользователей.

Чтобы получить всех пользователей с уровнем X, просто используйте запрос типа User.find_all_by_level(2)

class User
  attr_accessible :level

  def allowed_to_edit_user?(user)
    case self[:level]
      when 1
        user.level > 1
      when 2
        user.level > 2 && user.created_by?(self)
    end
    false
  end

  def allowed_to_create_user_with_level?(level)
    self[:level] <= 2 && self[:level] < level 
  end
end

Btw. кто создает пользователей уровня 1? ; -)

...