如何将具有多种权限的单一方法传递给'可以?'康康的方法?

时间:2013-07-21 02:38:29

标签: ruby-on-rails devise cancan

我正在使用devise和cancan gem来管理我的rails应用程序中的身份验证和权限。该应用程序是关于图书馆管理。我在ability.rb中定义了方法,如:

def lend
  can :manage, Book
  can :manage, Transactions
end

然后在ability.rb中,我已将权限指定为

if user.role? == "librarian" 
  can lend
end

在视图中,我可以对具有“图书管理员”角色的用户使用can?(:manage, Book)can?(manage, Transaction)

但是,我希望能够使用current_user.can?(:lend)。我跟着 this github page做了罐头?用户模型中可用的方法。这允许我使用

current_user.can?(:manage, Book)

但是,current_user.can?(:lend)会导致wrong number of arguments(1 for 2+)。我有一种感觉,我在这里缺少一点智力。我试过谷歌和相关的帖子,但没有用。请帮忙。

1 个答案:

答案 0 :(得分:0)

can?有两个必需的参数:

def can?(action, subject, *extra_args)

因此:wrong number of arguments(1 for 2+)

请参阅cancan/lib/cancan/ability.rb:56

此外,在您的ability.rb(下方)中,既没有action也没有subject名为:lend。方法名称与cancan无关。

def lend
  can :manage, Book
  can :manage, Transactions
end

if user.role? == "librarian" 
  can lend
end