Rails的路由与枚举用户角色

问题描述 投票:0回答:2

我创建了一个用户表,并实现设计。然后我添加了一个枚举角色给用户表,以便我可以识别管理员,导游和成员。

我想要做的是基于枚举用户类型的某些资源限制的路线。我试过了:

resources :users.guide do
    get 'guide/dashboard', :to => 'guides#dashboard'
end

还有一些变种,但没有成功。上面给我的错误:

undefined method `guide' for :users:Symbol

我身边做了一些戳,似乎无法找到一个很好的回应。我回避CanCanCan和Rolify,我想保持事情基本的可能。有任何想法吗?谢谢!

编辑按照以下建议

于是我去了,如下建议,以使文件类似于此更新了我的路线:

Rails.application.routes.draw do
  devise_for :users
  #open to public
  root 'welcome#index'
  resources :guides, only: [:show], param: :username
  resources :itineraries, only: [:index] #, only: [:index, :show] 

  authenticate :user, ->(u) { u.guide? } do
    resources :guides, only: [:edit, :destroy], param: :username
    get 'guide/dashboard', :to => 'guides#dashboard'
  end

  resources :locations, only: [:new, :create, :edit, :update, :destroy, :index, :show]

end

无论出于何种原因,引导个人资料显示/编辑工作正常;仪表板正常工作;但身份验证块之外的其他东西(行程和位置的资源)不工作,我重定向到设计的登录页面。它们是外部(和在一个案件以上)的身份验证块,不知道为什么,这与一些资源/途径,而不是别人发生。

ruby-on-rails devise rails-routing
2个回答
1
投票

您可以使用色器件的帮手。随着authenticate,可以使资源和途径,将要求进行身份验证,他们可以访问之前。与authenticate更换authenticated导致资源根本无法使用,如果用户没有通过验证。两个助手采取可选的范围和块提供关于模型实例本身约束。

authenticate :user, ->(u) { u.guide? } do
  get 'guide/dashboard', :to => 'guides#dashboard'
end

0
投票

所以,你的问题是limit routes for certain resources based on the enum user type。我建议你应该实现,而不是试图在你的路线,以创造更多的资源/范围的授权的东西,它的正确性。

© www.soinside.com 2019 - 2024. All rights reserved.