cancancan-按字符串查找权限

uyhoqukh  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(252)

我经常使用cancancan检查特定类/示例的权限。

class Ability
  include CanCan::Ability

  def initialize(user)  
    can do |action, subject_class|
      # Lookup users permission inside of this block.
      # action might be :read
      # subject_class might be a class like Company.
    end
  end
end

上面的例子将为您的工作提供帮助 user.can?(:read, Company) .
我现在已经为多个类创建了一个权限集。我的应用程序有多个我想要分组的设置 AccountingSetting 这样我就可以通过 user.can?(:read, "AccountingSetting") . 自从 AccountingSetting 不是实际的模型/类。我将字符串传递给该方法。这不起作用,因为 subject_class 参数返回 String -类而不是实际字符串。
cancancan不支持权限的字符串查找,还是我遗漏了什么?

643ylb08

643ylb081#

对文档进行了深入研究,找到了一个解决方案:
https://rdoc.info/github/cancancommunity/cancancan/cancan/ability#can-示例法
can块返回第三个参数,该参数将包括所有none类参数的值。

def initialize(user)  
    can do |action, class, object|
      # Lookup users permission inside of this block.
      # action might be :read
      # class might be a class like Company
      # object might be nil or a string/symbol.
    end
  end

那么什么时候 can?(:read, 'AnythingPossibleThingy') 被称为 object 参数中填充了 'AnythingPossibleThingy' 我可以使用它来查找权限。

相关问题