3

Я следующие действия для моего контроллера предложений:Перенаправление определенной точки зрения, если Пандит не авторизованы для показа действия

 def show 
     @proposal = Proposal.find(params[:id]) 
     authorize @proposal 
     end 

Я следующую политику:

class ProposalPolicy 
    attr_reader :current_user, :proposal 

Как можно перенаправить к конкретной страницы. Скажите предложения индекса или корневую страницу, если разрешение отклонено при попытке перейти на страницу показа?

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

not allowed to show? this<proposal OBJ ispsum lorem> 

Я просто хочу, чтобы они имели простое уведомление и перенаправлены на другую страницу. Каков наилучший способ сделать это? Я угадываю с каким-то выражением if в представлении шоу, но пока ничего не работает.

def initialize(current_user, proposal) 
    @current_user = current_user 
    @proposal = proposal 
    end 

    def show? 
    @proposal.published? or @proposal.proposer == @current_user 
    end 
end 

ответ

6

У Pundit есть механизм для этого. Вы создадите частный метод в своем контроллере под названием user_not_authorized - в нем вы сможете создать флеш-уведомление и добавить местоположение.

private 

def user_not_authorized 
    flash[:alert] = "You are not cool enough to do this - go back from whence you came." 
    redirect_to(some_other_path) 
end 

Более подробная информация здесь: https://github.com/elabs/pundit#rescuing-a-denied-authorization-in-rails

+0

Могу ли я дать пользовательские сообщения в зависимости от того, какое действие они не уполномочены для? – james

+0

Действительно. Просто добавьте политику и действия в свой файл локали в config - вы можете увидеть пример в документации pundit: https://github.com/elabs/pundit#creating-custom-error-messages – trh

 Смежные вопросы

  • Нет связанных вопросов^_^