ruby-on-rails - 如何使用cancan对一系列资源进行授权?

标签 ruby-on-rails authorization cancan

我有一个非静态 Controller ,我正在尝试使用 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 来处理复杂的非静态 Controller 更容易(尽管我的应用程序中有很多其他静态 Controller ,效果很好)。

最佳答案

这里有点晚了,但你可以把它写在你的能力类别中

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

关于ruby-on-rails - 如何使用cancan对一系列资源进行授权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5446654/

相关文章:

ruby-on-rails - 选择元素,simple_form 助手

javascript - OAuth弹窗跨域安全React.js

authorization - RavenDB:如何检查用户的权限,想要对特定文档执行操作

ruby-on-rails - 如何在 rspec 测试中忽略 ApplicationController 中的 rescue_from?

ruby-on-rails - 跳过特定 Controller rails 的特定操作的登录

ruby-on-rails - 编辑 :How to send payments to users every month?

ruby-on-rails - HABTM重复记录

php - 当用户已连接时调用 Facebook 注销/断开 FB.login()

ruby-on-rails - cancancan has_and_belongs_to_many 的能力

css - 无法访问 Rails 4 中的单独 Controller 样式表