У меня есть много пользователей благодаря разработке, и я хочу запретить несколько создателей проблем. У Devise встроенная поддержка?
Спасибо
У меня есть много пользователей благодаря разработке, и я хочу запретить несколько создателей проблем. У Devise встроенная поддержка?
Спасибо
Я только что реализовал это в своем проекте. То, что я делал, было похоже на Kleber выше, я определил это в своем приложении/контроллерах/session_controller.rb(переопределив Devise)...
class SessionsController < Devise::SessionsController
protected
def after_sign_in_path_for(resource)
if resource.is_a?(User) && resource.banned?
sign_out resource
flash[:error] = "This account has been suspended for violation of...."
root_path
else
super
end
end
end
И затем я добавил логический столбец для пользователей, названных "banned", поэтому модераторы проверяют флажок при редактировании пользователя в бэкэнд, а логическое значение вернет true.
Но был один изъян... если пользователь уже был зарегистрирован и затем заблокирован, у них все еще был доступ к тому, чтобы делать вещи на сайте (комментарии и т.д.) по крайней мере до истечения срока их сеанса или выхода из системы. Поэтому я сделал это в приложении /controller/application _controller.rb...
class ApplicationController < ActionController::Base
before_filter :banned?
def banned?
if current_user.present? && current_user.banned?
sign_out current_user
flash[:error] = "This account has been suspended...."
root_path
end
end
end
Это автоматически выйдет из системы, если обнаружен запрет. Во всяком случае, не уверен, что все это - "лучший" способ повлиять на все, поскольку я новичок в Rails, но все это работает для меня и надеюсь, что это по крайней мере даст вам хорошее начало.
Из проекта doku для authenticatable.rb:
Прежде чем аутентифицировать пользователя и в каждом запросе, Devise проверяет, активна ли ваша модель, вызывая model.active_for_authentication?. Этот метод перезаписывается другими модулями разработки. Например,: confirmable перезаписывает .active_for_authentication? чтобы вернуть true только в том случае, если ваша модель была подтверждена.
Вы сами перезаписываете этот метод, но если вы это сделаете, не забудьте вызвать super:
def active_for_authentication?
super && special_condition_is_valid?
end
Итак, когда у пользователя есть флаг blocked
в пользовательской базе данных, метод в пользовательской модели выглядит примерно так:
def active_for_authentication?
super && !self.blocked
end
В таблицу "Пользователи" вы можете добавить поле "banned".
а затем на вашем контроллере вы можете иметь что-то вроде этого:
class UsersController < ApplicationController
before_filter :deny_banned
protected
def deny_banned
if current_user.banned?
redirect_to root_path, :notice => "You are banned from this site."
end
end
end
Это не полно, но я надеюсь, что это вам поможет.