Авторизация ролей с помощью Rails 3 и Devise

Я использовал devise с тех пор, как перешел на Rails 3, это было примерно в первой или второй бета-версии, и теперь мне также нужны некоторые роли. После поиска в Интернете показалось, что CanCan должен быть лучшим решением. Но я не уверен, сможет ли CanCan справиться с моими потребностями, например, мне нужен модератор форума, который может редактировать/удалять тему, но пользователь, создавший тему, также должен иметь возможность редактировать, так как я могу это сделать?


person Oluf Nielsen    schedule 31.12.2010    source источник
comment
а как насчет ролей в Devise, можно ли их вообще использовать? Существует либо простое решение «admin_flag», либо полный маршрут объекта ролей, который позволяет использовать несколько ролей для одного и того же пользователя. Все на сайте Devise github. возможно, они добавили это совсем недавно. Я не знаю CanCan, хотя. Возможно, у вас есть требование, которое делает этот вариант возможным.   -  person Michael Durrant    schedule 21.04.2011


Ответы (1)


Основываясь на вашем кратком описании выше, я полагаю, что CanCan сможет удовлетворить ваши потребности.

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

Я обнаружил, что полезно напрямую моделировать право собственности, а не пытаться получить роль «владельца». Таким образом (при условии, что вы используете более простую схему ролей, описанную выше), вариант использования, который вы описали выше, будет смоделирован в вашем определении Способности следующим образом:

def initialize(user)
  ...
  can :manage, Topic if user.is? :moderator
  can :manage, Topic { |topic| if (topic.user_id == user.id) }
  ...
end

Надеюсь это поможет.

person dondo    schedule 31.12.2010