2011-08-02 2 views
0

두 개의 범위가있는 단일 사용자 모델을 사용하여 단일 응용 프로그램에서 Devise 설정을 마쳤으므로 /admin/login과 일반 /users/login 경로를 가질 수 있습니다. 이 꽤 잘 작동, 내 설정/routes.rb 파일은 다음과 같습니다 :이 꽤 벌금과 멋쟁이 작동CanCan 및 Devise, 역할 기반 로그인 제한

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  

, 내가 다른 영향을주지 않고 응용 프로그램의 각 측면에 로그인 할 수 있습니다. 즉, 세션 이름은 별도이고 로그인하면 다른 세션에 로그인하지 않습니다.

이제는 Roles 모델과 Ability 모델로 CanCan을 설정하고이를 내 데이터베이스에 정의하고 작동하도록했습니다.

질문 : 내 역할이 해당 영역에 로그인하는 것을 허용하지 않기 때문에 admin/login에 양식을 작성하고 오류 메시지가 표시되도록하고 싶습니다. 이것을 어떻게 할 수 있습니까?

+0

앱이 cancan에 역할 기반 권한을 요청하는 곳이 있습니다. 그게 어디 있니? 디버거를 사용하는 경우 Ability 모델에 추적을 넣은 다음 호출 한 사람의 백 트레이스를 볼 수 있습니다. 어딘가에 필터가 있습니다. – Amala

답변

0

질문에 약간 혼란 스럽습니다. admin/login에서 양식을 작성하는 중이라면 아마도 아직 로그인하지 않았습니까?

이 경우, current_user 또는 current_admin이 없으므로 CanCan에 아직 전달되지 않은 항목은 없습니다.

비슷한 앱을 설정하고 앱의 각면에 다른 계정을 유지합니다. 내 사용자 계정이 내 관리자 계정과 다릅니다. 잊어 버린 경우 일반 사용자 계정을 사용하여 관리자 측에 로그인하려고하면 Devise에서 알 수없는 사용자/암호 오류가 발생합니다.