加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何使用cancan来授权一系列资源?

发布时间:2020-12-17 03:58:53 所属栏目:百科 来源:网络整理
导读:我有一个非宁静的控制器,我正在尝试使用cancan授权!应用权限的方法. 我有一个像这样开始的delete_multiple动作 def delete_multiple @invoices = apparent_user.invoices.find(params[:invoice_ids]) 我想在继续操作之前检查用户是否有权删除所有这些发票.
我有一个非宁静的控制器,我正在尝试使用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用于复杂的非静态控制器更容易手动(尽管我的应用程序中有很多其他安静的控制器,它工作得很好).

解决方法

在这里稍晚,但你可以在你的能力课上写这个

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读