我刚刚在单个应用程序上设置了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
上填写表单,并收到错误消息,因为我的角色不允许我登录该区域。我怎么能做到这一点?
答案 0 :(得分:0)
我对你的问题感到有点困惑。如果您在admin / login上填写表单,那么可能您还没有登录?
如果是这种情况,则没有current_user或current_admin,因此尚未向CanCan传递任何内容。
我的应用程序中有类似的设置,并在应用程序的每一侧维护不同的帐户。我的用户帐户与我的管理员帐户不同。如果我忘记并尝试使用我的常规用户帐户登录管理员端,我只是从Devise收到一个未知的用户/密码错误。