CanCanCan控制器的别名方法

时间:2018-05-24 10:39:38

标签: ruby cancancan

在我的应用程序中,我为管理员设置了这样的权限:

can :read, Journey
can :destroy, Journey
can :update, Journey

我有这样的控制器:

class JourneyController < ApplicationController

  authorize_resource class: :journey

  def index; end

  def show; end

end

module Journeys
  class VoidJourneyController < ApplicationController

    authorize_resource class: :journey

    def show; end

    def destroy; end

  end
end

这是基于DHH如何管理他的控制器:http://jeromedalbert.com/how-dhh-organizes-his-rails-controllers/

现在我遇到的问题是因为我在VoidJourney控制器中有一个show方法(这是为了向用户显示我们与API交谈时的一些额外信息),这意味着一个没有权限的用户销毁旅程可以访问它,因为show有别名可读,只有该控制器中的destroy受到保护。

CanCanCan具有alias_action方法,但只允许将一个方法别名化为另一个方法,而不仅仅是一个。

我能想到的唯一方法就是:

def show
  authorize! :destroy, :journey
end

这样它就可以针对不同的权限检查该方法。但是如果可能的话,我希望避免这样做。

是否可以将一个控制器中的方法别名另一个控制器?而不是所有控制器的别名。看一下我无法看到的文档。

0 个答案:

没有答案