我有一个非常安静的控制器,我正在尝试使用cancan授权!将权限应用于的方法。
我有一个像这样开始的delete_multiple动作
def delete_multiple
@invoices = apparent_user.invoices.find(params[:invoice_ids])
我想在继续操作之前检查用户是否有权删除所有这些发票。如果我使用
authorize! :delete_multiple, @invoices
许可被拒绝。我的能力.rb包括以下内容
if user.admin?
can :manage, :all
elsif user.approved_user?
can [:read, :update, :destroy, :delete_multiple], Invoice, :user_id => user.id
end
是通过循环遍历我的数组并单独调用授权还是更聪明的做事方式?我开始觉得做授权会比使用cancan用于复杂的非静态控制器更容易手动(虽然我的应用程序中有很多其他安静的控制器,但它工作得很好)。
答案 0 :(得分:11)
在这里稍晚,但你可以在你的能力课中写下这个
can :delete_multiple, Array do |arr|
arr.inject(true){|r, el| r && can?(:delete, el)}
end
修改强>
这也可以写成:
can :delete_multiple, Array do |arr|
arr.all? { |el| can?(:delete, el) }
end