2017-10-07 6 views
0

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? enter image description here

En outre, si vous vérifiez sur GitHub, il est un exemple de la façon d'utiliser cancancan:

enter image description here

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

+0

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 –

Répondre

0

current_user repose sur une session Rails. Comme il s'agit de votre nouvelle action sur votre contrôleur d'utilisateurs, vous n'avez pas de session active, donc pas de current_user.