Посмотрите на страницу CanCan GitHub: http://github.com/ryanb/cancan
Основываясь на рассмотрении этого и RailsCast, я заметил две вещи:
- Вы определяете Способность как отдельную модель. Кажется, что нет необходимых столбцов базы данных.
- Вы никоим образом не будете вынуждены выполнять роли, вы можете делать это как угодно.
С помощью restful_authentication просто выполните обычные действия с User
моделью.
Самый естественный способ добавить CanCan - добавить дополнительный столбец к вашей модели User
с именем role
или ability
или что-то еще, а затем определить методы по своему усмотрению. Лично я бы, вероятно, использовал какую-то систему счисления, хранящуюся в базе данных, такую как «0» для администратора, «1» для пользователя высокого уровня, «2» для пользователя низкого уровня и т. Д.
Вот несколько возможностей:
# Returns true if User is an admin
def admin?
self.role == 0
end
И
# Returns true if User is admin and role?(:admin) is called, etc.
def role?(to_match)
{
0 => :admin,
1 => :super_user,
2 => :user,
3 => :commenter,
}[self.role] == to_match
end
Затем в вашем методе Ability
initialize
вы можете использовать какие-то условные выражения для установки способностей, такие как эти фрагменты из Railscast / readme:
if user.role? :admin
can :manage, :all
elsif user.role? :super_user
...
end
Или:
if user.admin?
can :manage, :all
else
...
end