Я использую жемчужину CanCan в своем приложении Rails и хочу проверить, является ли текущий запрос защищенным ресурсом в моем приложении.Проверьте, не защищен ли текущий запрос в Rails с помощью CanCan
Так, например, у меня есть следующие:
class AdminController < ApplicationController
load_and_authorize_resource
end
Как я могу проверить, если запрос защищен канкан?
Я могу получить доступ к контроллеру и действовать через параметры. Я не могу использовать стандартные помощники и cannot?
, поскольку они будут проверять, имеет ли разрешение current_user
, а не если на самом деле это действие имеет защиту.
Так, например:
class ApplicationController < ActionController::Base
before_action :check_protected
def check_protected
if can? params[:action].to_sym, Object.const_get(params[:controller].classify)
# resource is protected
else
# resource is not protected
end
end
end
^^ Это не будет работать, потому что он всегда будет говорить false
, когда нет current_user
или если пользователь не имеет прав. Мне нужно проверить, защищен ли сам ресурс CanCan.
Если бы я имел эти примеры:
class PostsController < AdminController
def index
end
end
class HomeController < ApplicationController
def index
end
end
Индекс для PostsController должен быть идентифицирован как защищенные, и индекс для HomeController как незащищенные.
CanCan является жемчужиной авторизации пользователя, цель состоит в том, чтобы проверить, если пользователь имеет доступ к авторизованному ресурсу. Для этого требуется класс способности и метод current_user. Вы можете переопределить значения по умолчанию, как описано [на этой странице] (https://github.com/ryanb/cancan/wiki/changing-defaults). – trueinViso
@trueinViso У меня есть как класс 'Способность', так и метод' current_user'. Но я хочу знать, имеет ли текущий метод контроллера какие-либо атрибуты cancan, прикрепленные к нему. – Cameron
У контроллера нет атрибутов cancan, прикрепленных к нему. Способности определяются на current_user. Когда вы скажете skip_authorize_resource, это означает, что он не будет проверять, имеет ли текущий_user доступ к ресурсу. – trueinViso