2011-08-02 50 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的未知用户/密码错误。