CanCan和Devise,基于Role限制登录

时间:2011-08-02 04:01:40

标签: devise ruby-on-rails-3.1 cancan

我刚刚在单个应用程序上设置了Devise,使用了具有两个范围的单个用户模型,因此我可以拥有/admin/login和常规/users/login路径。这很好用,我的config / routes.rb文件如下所示:

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上填写表单,并收到错误消息,因为我的角色不允许我登录该区域。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:0)

我对你的问题感到有点困惑。如果您在admin / login上填写表单,那么可能您还没有登录?

如果是这种情况,则没有current_user或current_admin,因此尚未向CanCan传递任何内容。

我的应用程序中有类似的设置,并在应用程序的每一侧维护不同的帐户。我的用户帐户与我的管理员帐户不同。如果我忘记并尝试使用我的常规用户帐户登录管理员端,我只是从Devise收到一个未知的用户/密码错误。