在CanCan的Ability Class中调用方法时的NameError

时间:2012-06-05 08:56:44

标签: ruby-on-rails cancan

我正在使用CanCan在我正在构建的应用程序中使用基于角色的管理系统。它是网上商店的一种模板,因此管理员可以在他/她有权访问的每个网上商店中拥有不同的角色。例如:在网店1中,他是主持人,在网店2中,他是编辑。

所以我在CanCan的能力类中需要做的是检查当前用户在当前商店(current_shop)中的角色。我写了这个:

class Ability
 include CanCan::Ability

 def initialize(admin)

   if admin.supervise?(current_shop, controller_gsub)
     can :manage, :all
   elsif admin.manage?(current_shop, controller_gsub)
     can :manage, :all
   elsif admin.access?(current_shop, controller_gsub)
     can :read, :all
   end

 end
end

问题是我似乎无法从Ability Class调用current_shop方法,因为我收到此错误:

undefined local variable or method `current_shop' for #<Ability:0x104df38b0>

有人知道如何解决这个问题吗? Thanx提前!

1 个答案:

答案 0 :(得分:2)

实际上,您无法访问Ability类中的任何控制器方法。 什么是业务逻辑?如果他是current_shop的主管,管理员可以真正管理每件事吗?或者他可能只管理他管理商店的事情?

然后像smth那样很高兴:

class Ability
 include CanCan::Ability

 def initialize(admin)

   can :manage, :all do |obj|
     admin.supervise?(obj.shop) || admin.manage?(obj.shop)
   end
   can :read, :all do |obj|
     admin.access?(obj.shop)
   end

 end
end

PS我不太确定该块是否适用于:all,并且在未知类上调用.shop并不合逻辑,但这只是为了显示方式,它很容易列出将要使用它的模型