在我的应用程序中,我为管理员设置了这样的权限:
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
这样它就可以针对不同的权限检查该方法。但是如果可能的话,我希望避免这样做。
是否可以将一个控制器中的方法别名另一个控制器?而不是所有控制器的别名。看一下我无法看到的文档。