我怎么会去定义几个色器件模型的能力?
Answer 1:
让我们假设你的应用程序有两个独立的设计,供电用户模型叫做User
和Admin
。 这意味着你使用像方法current_user
和current_admin
并排。
让我们进一步假设你只需要/想一个Ability
类,它包含了所有的康康舞权限设置...
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
case user
when User
can :create, Comment
can :read, :all
when Admin
can :manage, :all
end
end
end
这也正是其他人提出的,但还有另外一个步骤中,您必须考虑。
默认情况下,惨惨假设方法current_user
存在,并且会返回一个User对象与你的比较Ability
设置。 然而,我们的管理员用户可以使用发现current_admin
。 瞒着惨惨哪里可以找到管理对象,他们从来没有得到审查,因此从来没有得到许可; 与管理员打交道时,我们必须改变默认设置。
添加到以下application_controller.rb
...
def current_ability
if admin_signed_in?
@current_ability ||= Ability.new(current_admin)
else
@current_ability ||= Ability.new(current_user)
end
end
现在,我们的能力类将看管理对象(如果有),并依傍普通用户当没有出现。
进一步发展使我们能够管理权限转移到自己独立的能力类...
def current_ability
if admin_signed_in?
@current_ability ||= AdminPowers.new(current_admin)
else
@current_ability ||= Ability.new(current_user)
end
end
欲了解更多信息,请参见更改默认设置在Wiki。 荣誉对斯特凡在适当文章指着我。
仅供参考- 康康舞是死的,万岁CanCanCan ! 了解最新的bug修复和新功能。 同样的命名空间,所以它只是一个简易的宝石替换您的Gemfile。
gem 'cancancan', '~> 1.8'
Answer 2:
当前用户模式传递给Ability#initialize
,所以你可以检查其类:
class Ability
include CanCan::Ability
def initialize(model)
case model
when Admin
can :manage, :all
when User
can :create, Comment
can :read, :all
else
can :read, :all
end
end
end
Answer 3:
这为我工作 -
class Ability
include CanCan::Ability
def initialize(user)
if user.is_a?(Admin)
can :manage, :all
elsif user.is_a?(User)
can :create, Comment
can :read, :all
else
can :read, :all
end
end
end
文章来源: How to integrate CanCan with multiple devise models?