Поскольку я знаю CanCan и Declarative_authorization, и я реализовал авторизацию на основе ролей с обоими, я рекомендую CanCan.Просто мои два цента.
Пример (не проверено, к сожалению, я не могу проверить здесь, и у меня нет доступа к моему коду)
Итак, допустим, у нас есть такая структура:
class User < ActiveRecord::Base
belongs_to :role
end
class Role < ActiveRecord::Base
has_many :users
# attributes: project_read, project_create, project_update
end
Тогда CanCan может выглядеть следующим образом:
class Ability
include CanCan::Ability
def initialize(user)
@user = user
@role = user.role
# user can see a project if he has project_read => true in his role
can :read, Project if role.project_read?
# same, but with create
can :create, Project if role.project_create?
# can do everything with projects if he is an admin
can :manage, Project if user.admin?
end
end
Всю необходимую информацию вы можете найти в вики CanCan на github.Личная рекомендация читать:
В основном вам просто нужно продлитьпример выше, чтобы включить ваши роли через ваши отношения.Для простоты вы также можете создать дополнительные вспомогательные методы в ability.rb
.
Основное среднее предостережение, за которое вы можете согласиться (по крайней мере, я): Убедитесь, что ваш пользователь может сделатьчто-то с моделью, прежде чем определить, что пользователь не может .В противном случае вы будете разочарованы и будете думать: «Но почему? Я никогда не писал, что пользователь не может».Да уж.Но вы также никогда не писали явно, что он может ...