Rails направляет на страницу, которая не найдена, вместо ошибки 404 - PullRequest
0 голосов
/ 27 мая 2020
• 1000 file:
match '*path', via: :all, to: 'errors#page_not_found'

Я использую Pundit gem для авторизации, и вот моя политика пользователей:

class UserPolicy < ApplicationPolicy
    class Scope < Scope
      def resolve
        scope.all
      end
    end

    def index?
      user.admin? 
    end 
  end

Теперь проблема в том, что всякий раз, когда я посещаю страницу, не существует, он показывает мне это:

enter image description here

Но если пользователь без прав администратора посещает страницу, доступ к которой не предусмотрен (например, localhost: 3000 / users-list), он показывает следующее:

enter image description here

Как мне убедиться, что отображается страница 404 или конкретная страница c на моем папка publi c всякий раз, когда несанкционированный пользователь посещает страницу, доступ к которой может получить только администратор? ОБНОВЛЕНИЕ: вот содержимое моего файла application_controller.rb:

class ApplicationController < ActionController::Base
    include Pundit
    protect_from_forgery with: :exception
    before_action :configure_permitted_parameters, if: :devise_controller?
    rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
    rescue_from ActiveRecord::RecordNotFound, with: :show_404

    def after_sign_in_path_for(resource)
       stored_location_for(resource) || contacts_path
    end

    def after_sign_up_path_for(resource)
       after_sign_in_path_for(resource)
    end

     protected

          def configure_permitted_parameters
               devise_parameter_sanitizer.permit(:sign_up) { |u| u.permit(:user_avatar, :name, :email, :password, :password_confirmation)}

               devise_parameter_sanitizer.permit(:account_update) { |u| u.permit(:user_avatar, :name, :email, :password, :current_password)}
          end

    private

    def user_not_authorized
      flash[:danger] = "You are not authorized to perform this action."
      redirect_to action: :index
    end 

    def show_404
      render template: "errors/404", status: 404
    end 
end

1 Ответ

0 голосов
/ 27 мая 2020

Вы должны переписать user_not_authorized на контроллере, который вы вызываете, когда пользователь, не являющийся администратором, посещает страницу, доступ к которой не разрешен

def user_not_authorized
  show_404
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...