2011-08-02 48 views
0

我剛剛完成了在單個應用程序上使用單個用戶模型和兩個示波器設置Devise,因此我可以使用/admin/login以及常規/users/login路徑。這工作得很好,我的config/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以獲取基於角色的權限。你在哪裏?如果您正在使用調試器,則可以在能力模型上添加跟蹤,然後查看調用者的回溯。你有一個過濾器。 – Amala

回答

0

我有點困惑你的問題。如果你在admin/login上填寫表單,那麼你可能還沒有登錄?

如果是這樣,那麼沒有current_user或current_admin,因此沒有任何內容傳遞給CanCan。

我有我的應用程序類似的設置和對應用的每個側面保持不同的帳戶。我的用戶帳戶與我的管理員帳戶不同。如果我忘記並嘗試使用常規用戶帳戶登錄管理員端,我只會收到來自Devise的未知用戶/密碼錯誤。