Rails Routing с ролями пользователей Enum - PullRequest
0 голосов
/ 07 февраля 2019

Я создал таблицу пользователей и внедрил Devise.Затем я добавил роль enum в таблицу пользователей, чтобы я мог идентифицировать администраторов, гидов и участников.

Я хотел бы ограничить маршруты для определенных ресурсов на основе типа пользователя enum.Я пробовал:

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

По какой-то причине, руководство профиля показывает / редактирует отлично;приборная панель работает нормально;но другие вещи за пределами блока проверки подлинности (ресурсы маршрутов и местоположений) не работают, я перенаправлен на страницу входа в Devise.Они находятся вне (и в одном случае выше) блока проверки подлинности, не зная, почему это происходит с некоторыми ресурсами / маршрутами, а не с другими.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Вы можете использовать устройства помощников.С authenticate можно создавать ресурсы и маршруты, которые будут запрашивать аутентификацию, прежде чем они будут доступны.Замена authenticate на authenticated делает ресурс просто недоступным, если пользователь не аутентифицирован.Оба помощника принимают необязательную область видимости и блок, чтобы обеспечить ограничения для самого экземпляра модели.

authenticate :user, ->(u) { u.guide? } do
  get 'guide/dashboard', :to => 'guides#dashboard'
end
0 голосов
/ 07 февраля 2019

Итак, ваша проблема limit routes for certain resources based on the enum user type.Я предлагаю вам реализовать авторизацию вместо того, чтобы пытаться создавать больше ресурсов / областей на вашем маршруте, это правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...