2011-08-02 3 views
0

Je viens de terminer la configuration de Devise sur une seule application, en utilisant un seul modèle d'utilisateur avec deux étendues, donc je peux avoir un /admin/login ainsi qu'un chemin /users/login régulier. Cela fonctionne assez bien, ma config/routes.rb ressemble à ceci:CanCan et Devise, restriction de connexion basée sur le rôle

devise_for :users, 
      :path_names => { :sign_in => 'login', :sign_out => 'logout' } 

devise_for :admins, 
      :class_name => 'User', 
      :skip => [:passwords, :registrations, :confirmations, :sessions], 
      :controllers => { :sessions => 'admin/sessions' } do 

    get 'admin/login' => 'admin/sessions#new', :as => :new_admin_session 
    post 'admin/login' => 'admin/sessions#create', :as => :admin_session 
    delete 'admin/logout' => 'admin/sessions#destroy', :as => :destroy_admin_session 
end  

Cela fonctionne assez bien et dandy, je peux connecter à chaque côté de l'application sans affecter l'autre. C'est-à-dire que les noms de session sont séparés et que la connexion à l'un ne vous connecte pas à l'autre.

Maintenant, j'ai configuré CanCan avec mon modèle Roles, et un modèle Ability, et les ai définis dans ma base de données et fonctionnant. Question est, je veux être en mesure de remplir le formulaire sur admin/login, et recevez un message d'erreur parce que mon rôle ne me permet pas de se connecter dans cette zone. Comment puis-je accomplir cela?

+0

Quelque part votre application demande cancan pour une permission basée sur le rôle. Où avez-vous cela? Si vous utilisez un débogueur, vous pouvez placer une trace sur le modèle Capacité et ensuite voir la trace de qui l'a appelée. Vous avez un filtre quelque part. – Amala

Répondre

0

Je suis un peu confus par votre question. Si vous remplissez le formulaire sur admin/login, vous n'avez probablement pas encore ouvert de session?

Si tel est le cas, alors il n'y a pas current_user ou current_admin et donc rien n'est encore transmis à CanCan.

J'ai une configuration similaire dans mon application et je gère différents comptes de chaque côté de l'application. Mon compte d'utilisateur est différent de mon compte d'administrateur. Si j'oublie et que j'essaie de me connecter au côté admin en utilisant mon compte utilisateur habituel, je reçois simplement une erreur utilisateur/mot de passe inconnue de Devise.

Questions connexes