0

我试图为具有约束的相同设计模型/资源提供不同的路径,但第一个路径是在这种情况下应用的“访问者”。

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

在不同的约束条件下设计是否可以为同一资源提供不同的路径?

使用的约束是:

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

这完全可以通过设计实现还是这是一个错误?

4

1 回答 1

2

找到了这个问题的解决方案!

关于上下文的更多信息,基本上需要在前端有 /visitor 之类的东西,用户可以在其中登录(到成员区域)并编辑他们的个人资料和其他成员/客户操作。但我也希望 /admin 管理员/编辑/作者可以登录到(后端)管理仪表板/区域。这两个区域使用相同的设计模型/资源(因此管理员也可以访问成员区域)。附带说明一下,目前我正在使用 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

我还更新了视图 /admin/users(由管理区域上的设计使用)以使用新的管理设计路径。

非常感谢何塞·瓦利姆

于 2013-08-19T13:17:01.420 回答