J'utilise Devise pour l'authentification dans mon application.
Comment interdire à certains utilisateurs de se connecter - sorte de désactiver un utilisateur?
Fais-le comme ça:
Créez une colonne appelée is_active
pour le modèle User
.
Ajoutez ensuite le code ci-dessous au modèle User
:
class User < ActiveRecord::Base
#this method is called by devise to check for "active" state of the model
def active_for_authentication?
#remember to call the super
#then put our own check to determine "active" state using
#our own "is_active" column
super and self.is_active?
end
end
[~ # ~] mise à jour [~ # ~]
Comme le note Matt Huggins, la méthode est maintenant appelée active_for_authentication?
( Documentation )
Ajoutez une colonne au modèle User
: allowed_to_log_in
.
Ajoutez ensuite ceci à /app/models/user.rb
:
def active_for_authentication?
super and self.allowed_to_log_in?
end
Si vous souhaitez informer l'utilisateur d'un message personnalisé, vous pouvez également l'ajouter:
def inactive_message
"You are not allowed to log in."
end
Je pense que c'est assez important parce que le message standard de Devise dit:
"Votre compte n'est pas encore activé."
C'est déroutant pour les utilisateurs et la vraie raison est que vous leur avez "interdit" de se connecter.
Vous voulez faire une autorisation, pas une authentification. Devise ne fait que l'authentification, cependant.
C'est à dire. devise vous indique seulement qu'un utilisateur est ce qu'il prétend être.
Vous avez besoin d'autre chose pour lui interdire d'utiliser le site.
L'autorisation est un sujet populaire et il y a toute une liste de gemmes qui peuvent vous aider:
http://Ruby-toolbox.com/categories/Rails_authorization.html
Faites votre choix.