В моем приложении у меня есть права доступа, настроенные так для администратора:
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/
Теперь у меня проблема в том, что, поскольку у меня есть метод show внутри контроллера VoidJourney (это для отображения пользователю некоторой дополнительной информации, когда мы говорим с API), это означает, что пользовательу него нет разрешения на уничтожение пути, он может получить к нему доступ, потому что show имеет псевдоним для чтения, и в этом контроллере защищено только уничтожение.
CanCanCan имеет метод alias_action
, но это позволяет использовать псевдоним метода только длядругой для всех контроллеров, а не только один.
Единственный способ, которым я мог подумать, чтобы справиться с этим, это сделать:
def show
authorize! :destroy, :journey
end
Так, чтобы он проверял этот метод на предмет другого разрешения.Но я бы хотел избежать этого, если это возможно.
Возможно ли наложение псевдонима метода только в одном контроллере на другой?И не псевдоним для всех контроллеров.Глядя на документы, я не вижу этого.