授权嵌套控制器

时间:2017-08-06 06:22:21

标签: ruby-on-rails cancan cancancan

我有这个设置:

routes.rb

resources :orders, only: [] do
  # many other member actions
  # ...
  namespace :confirm, module: :orders do
    controller :confirm do
      get :cash
    end
  end
end

orders/confirm_controller.rb

class Orders::ConfirmController < ApplicationController
  load_and_authorize_resource class: Order,
                              id_param: :order_id,
                              instance_name: :order

  def cash
  end
end

ability.rb

can :cash, Order do |order|
  order.buyer == user
end

这个想法是:由于OrdersController已经超载了近20个动作,我想将新动作移动到嵌套控制器。上面的代码正在运行,但我觉得这部分:

  load_and_authorize_resource class: Order,
                              id_param: :order_id,
                              instance_name: :order

可以更轻松地完成。我拥有的能力是父控制器,而不是命名空间嵌套控制器,所以如果有人在cash中定义OrdersController方法,将会使用相同的能力,这是不好的。那么还有更好的方法吗?

0 个答案:

没有答案