Разработать до того, как подтвердить подлинность? - PullRequest
1 голос
/ 20 февраля 2011

Я использую Devise для аутентификации, и у меня есть роль администратора, которая может управлять пользователями.

Помимо этого, администратор также может заблокировать пользователя, не позволяя ему войти в систему в будущем. Я создал логическое поле внутри модели «Пользователь» под названием «is_locked?». Когда администратор блокирует пользователя, это логическое поле имеет значение true. На основании этой информации я могу знать, заблокирован ли пользователь или нет.

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

Ответы [ 2 ]

2 голосов
/ 20 февраля 2011

Я обнаружил, что вы можете сложить before_filter s в контроллере, поэтому, если вы хотите проверить authenticate_user!, вы также можете использовать before_filter (после authenticate_user!) для проверки заблокированногопользователь.Если модель пользователя имеет логический атрибут locked, вы можете просто написать приватный метод в своем контроллере (или помощнике), например:

#top of controller
before_filter authenticate_user!
before_filter user_active!

#bottom of controller
private
def user_active!
  unless current_user.locked?
    return true
  end
  redirect_to root_url, :notice => "Your account is locked."
  return false
end

Это даст вам нужную страницу, если выразблокированный пользователь и перенаправит вас на корневую страницу с сообщением об ошибке, если пользователь заблокирован.

1 голос
/ 20 февраля 2011

Вы можете добавить метод active? на модель User:

def active?
  super && !self.is_locked?
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...