我正在尝试为具有约束的相同设计模型/资源设置不同的路径,但第一条路径是在这种情况下应用的路径“visitor”。
constraints(ValidSubdomainFrontend) do
devise_for :users, :path => "visitor", :path_names => { :sign_in => 'login', :sign_out => 'logout', :password => 'secret', :confirmation => 'verification', :unlock => 'unblock', :registration => 'register', :sign_up => 'cmon_let_me_in' }
end
constraints(ValidSubdomainAdmin) do
devise_for :users do
get 'users', :path => "admin", :to => 'site_backend#index', :as => :user_root # Rails 3
end
devise_for :users, :controllers => { :registrations => 'users' }, :path => "admin", :path_names => { :sign_in => 'login', :sign_out => 'logout', :password => 'secret', :confirmation => 'verification', :unlock => 'unblock', :registration => 'register', :sign_up => 'cmon_let_me_in' }
end
对于不同约束下的Devise,是否可以为同一资源设置不同的路径?
使用的约束是:
class ValidSubdomainAdmin
def self.matches?(request)
request.subdomain.present? &&
request.env['PATH_INFO'].start_with?('/admin')
end
end
class ValidSubdomainFrontend
def self.matches?(request)
request.subdomain.present? &&
!request.env['PATH_INFO'].start_with?('/admin')
end
end
这可能与Devise完全相同,还是一个Bug?
答案 0 :(得分:2)
找到解决此问题的方法!
更多关于上下文,基本上需要在前端使用/ visitor这样的用户可以登录(到成员区域)并编辑他们的个人资料和其他成员/客户端操作。但我也想要/ admin管理员/编辑/作者可以登录到(后端)管理仪表板/区域。两个区域都使用相同的Devise模型/资源(因此管理员也可以访问成员区域)。作为附注,目前我正在使用CanCan权限来阻止成员访问管理区域。
我只需要替换管理区域约束:
constraints(ValidSubdomainAdmin) do
devise_scope :user do
#root :to => "devise/registrations#new"
get "admin/" => "admin#index"
post 'admin/' => 'devise/registrations#new', :as => :new_admin_registration
match 'admin/', :to => 'admin#index'
get "admin/edit" => "devise/registrations#edit"
match 'admin/edit', :to => 'devise/registrations#edit'
get "admin/login" => "devise/sessions#new", :as => :new_admin_session
match 'admin/login', :to => 'devise/sessions#new'
get "admin/logout" => "devise/sessions#destroy", :as => 'destroy_admin_session'
match 'admin/logout', :to => 'devise/sessions#destroy'
post "admin/password" => "devise/passwords#create"
get "admin/password/new" => "devise/passwords#new", :as => 'new_admin_password'
get "admin/password/edit" => "devise/passwords#edit"
put "admin/password" => "devise/passwords#update"
end
end
我还更新了views / admin / users(由管理区域上的devise使用)以使用新的管理设备路径。
非常感谢José Valim