Настройка другой страницы маршрута для пользователей без прав администратора (атрибут) (разработайте гем на ruby ​​на рельсах) - PullRequest
0 голосов
/ 07 февраля 2019

Я сейчас изучаю ROR и столкнулся с небольшой проблемой, касающейся различных корневых страниц в зависимости от типа пользователя.В моей пользовательской модели у меня есть атрибут для admin, который имеет значение true или false, в зависимости от пользователя.

Пожалуйста, посмотрите мой файл маршрутов ниже, в настоящее время все пользователи всегда идут в «Houses # Index», даже если они имеютadmin задано как false.

Я не вижу, где я иду не так в моем файле маршрутов.

Есть ли способ добавить условие для атрибута admin для аутентифицированного пользователя в моем файле маршрутов?

Routes.rb

Rails.application.routes.draw do
  devise_for :user
  get 'welcome/index'
  resources :houses
  resources :tenants
  resources :requests

  authenticated :user do
    root 'houses#index', as: "authenticated_root"
  end

  authenticated :user, {admin:'false'} do
    root 'requests#index', as: "authenticated_root1"
  end

  root 'welcome#index'
end

модель \ User.rb

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
  has_many :houses
  has_many :tenants
  has_many :requests

  def admin?
    admin
  end

end

Спасибо.

1 Ответ

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

Вы должны использовать after_sign_in_path_for метод devise в вашем application_controller.

https://github.com/plataformatec/devise/wiki/How-To:-redirect-to-a-specific-page-on-successful-sign-in

Например:

def after_sign_in_path_for(resource)
  stored_location_for(resource) || (resource.admin? ? admin_dashboard_url : user_dashboard_url(resource))
end

(Обратите внимание, что ресурсэто как псевдоним для пользовательского экземпляра. По умолчанию это первая роль устройства, объявленная в ваших маршрутах, как сказано здесь: https://stackoverflow.com/a/40825885/10347572)

Для всех других запросов, если вы не используете Cancan, создайте новый метод(очень похоже на приведенный выше) для перенаправления пользователя в соответствии с его типом (но если пользователь хочет получить доступ к странице администратора, вы должны поднять 404, а не просто перенаправление root)

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