2014-02-01 2 views
0

Моя модель пользователя имеет атрибуты password, password_confirmation, username, email и admin.Как проверить, является ли мой пользователь администратором в рельсах даже после новых HTTP-запросов?

Мне интересно, как именно я могу проверить, является ли текущий пользователь вошел в систему администратором. Как я буду использовать методы? Я пробовал, если user.admin? на мои взгляды, но кажется, что не работает.

Я новичок в рельсах, поэтому любые предложения были бы полезны!

+0

Почему это не кажется работать (что случилось)? Кроме того, какую библиотеку аутентификации вы используете (Devise, Oauth и т. Д.)? –

ответ

4

Существует хеш-сессия, которая сохраняется на протяжении всего сеанса.

После того, как пользователь вошел в систему, вы бы хранить идентификатор текущего пользователя в сессионный хэш, как так

сессии [: user_id] = user.id

Теперь, если вы хотите, чтобы текущий пользователь чтобы быть доступным из контроллеров и в ваших взглядах, вы можете перейти к приложениям/контроллеры/application_controller и сделать некоторые полезные методы ...

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    helper_method :current_user, :signed_in?, :is_admin? 

    def current_user 
    @current_user ||= User.find(session[:user_id]) if session[:user_id] 
    end 

    def signed_in? 
    !!current_user 
    end 

    def is_admin? 
    signed_in? ? current_user.admin : false 
    end 
end 

Теперь в ваших взглядах вы можете использовать «is_admin?» чтобы проверить, является ли текущий пользователь администратором, используйте "signed_in?" чтобы проверить, если пользователь вошел в систему, и «CURRENT_USER» для доступа к объекту пользователя, если он существует (если ни один пользователь не вошел в систему, «current_user» будет ноль)

Приветствия

+0

Это действительно полезно! Кроме того, что делает current_user? В частности, два! – google1254

+0

The !! преобразуется в true или false. Он работает следующим образом: если объект не равен нулю (например, если это пользовательский объект) или не false, если вы его используете! («не»), он становится ложным. Тогда, используя другое! («not») изменяет его на true. Аналогично, если он был уже нулевым или ложным, первый («не») меняет его на true, а второй! («not») изменяет его на false. Таким образом, это быстрый и простой способ преобразования «object/nil» в «true/false». – SteveTurczyn

1

Предлагаю вам проконсультироваться с этим Devise guide. В нем показано, как создать базовую модель пользователя с помощью Devise и как выполнять проверки администратора. И да, давая вам эту ссылку, я настоятельно рекомендую вам использовать Devise драгоценный камень для пользователей и всего этого;)

+0

Боковое примечание: вполне возможно, что они действительно используют придумывание (доказательством того, что * может быть * существованием поля 'password_confirmation'), мы пока еще не знаем. ОП не предоставил достаточной информации. –

+0

Спасибо, я пытаюсь сделать систему аутентификации «с нуля», чтобы лучше понять, что происходит, ответ Стивтукзина помог. – google1254

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