Dans mon projet, j'ai une classe d'utilisateur qui travaille avec l'authentification Devise. Chaque utilisateur a un rôle associé. Par exemple, un manager est le rôle # 1. Le rôle est une classe et il existe une association entre le rôle et l'utilisateur basé sur role_id. Donc un gestionnaire aura un role_id de 1.Rails: la condition gemme de cancancan ne fonctionne pas
J'ai installé cancancan gem pour gérer les permissions pour chaque utilisateur. Seul un manager peut créer un compte utilisateur. Alors, je l'ai écrit ceci dans la classe de capacité:
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.role_id == 1
can :manage, :user
else
cannot :manage, :user
end
end
Dans mon contrôleur utilisateur, j'ai ceci:
def new
@user = User.new
authorize! :manage, @user
end
Le problème est quand je me connecte avec mon manager et essayez d'accéder à la nouvelle page utilisateur , Je reçois le message de Cancancan disant que je n'ai pas la permission d'accéder à la page.
Je ne sais pas si c'est mon état ou quand je suis en train d'accéder à user.role_id ou ...
Merci pour votre aide.
Voir joyau cancancan: https://github.com/CanCanCommunity/cancancan
Edit:
Il est normal si mon IDE dit qu'il ne peut pas trouver current_user?
En outre, si vous vérifiez sur GitHub, il est un exemple de la façon d'utiliser cancancan:
Comme vous le voyez, il y a un @article après l'autorisation de lecture. Donc, je ne pense pas que je dois mettre current_user au lieu de @user
Enfin:
problème était le :user
qui n'a pas été correcte. Quand c'est un modèle, vous devez d'abord écrire une lettre majuscule pour le nom du modèle sans ":". Donc, au lieu de :user
, il devrait être User
Problème était l'utilisateur qui n'était pas correct. Quand c'est un modèle, vous devez d'abord écrire une lettre majuscule pour le nom du modèle sans ":". Donc, au lieu de: utilisateur, il devrait être utilisateur –