Доступ к экшенам контроллера только для админа


(МАКСИМ МАЙОРОВ) #1

Мне надо закрыть доступ к экшенам контроллера, пользователей, которые не являются админами.
Есть такая проверка:

before_action :authenticate_user!

Так же в ApplicationController, в секции Protected, написал такое:

        def admin?
            if current_user.admin?
                return true
            else
                false
            end
        end

Затем пишу в контроллере:

    before_action :authenticate_user!

    before_action :admin?

Но это не работает. Во вьюхах похожая конструкция работает:

  <% if current_user && current_user.admin? %>
 что то выполняется
                <% end %>

Подскажите, что я упускаю.


(Сергей) #2

метод admin? возвращает просто булевое значение и никуда не редеректит.
Сделайте как вто здесь посоветовали https://stackoverflow.com/questions/7411577/devise-before-filter-authenticate-admin


(МАКСИМ МАЙОРОВ) #3

А есть ли какая то константа, определяющая текущую страницу, как root_path? Что бы просто вернуть юзера туда, откуда он пришёл.


(Сергей) #4

Во так можно заюзать redirect_back fallback_location: root_path


(Kvokka) #5

ну можно redirect_to :back ,если речь про rails 4+

метод в первом посте #admin? прекрасен. а почему он именно в protected ?

PS: а откуда вообще метод #admin? ?


(МАКСИМ МАЙОРОВ) #6

Рельса 5

Видел так в примерах. Насколько понимаю, для того, что бы напрямую было не вызвать.

Есть поле в бд, я хотел в одном месте проверять, является ли юзер админом, и в зависимости от этого менять поведение экшена. Но опыта не хватило, приходится в каждом экшене проверять кто юзер.


(Виктор) #7

pundit
cancancan


#8

Обязано имхо работать. Вместе с devise. Он же и поможет отлуп настроить куда душе угодно.
P.S How do I check if my user is an admin in rails even after new http requests?