У меня есть проблема с методами, как current_manager, current_receptionist и т.д.Невидимые динамические методы аутентификации DEViSE
Есть невидимая, без методов для клиента. Это вызвано маршрутизацией. Я разместил devise_for всех типов людей (без клиента) в бэкэнде пространства имен. Когда я перемещаюсь над этим пространством имен, доступны все методы. Однако я хочу это заявление:
devise_for :receptionists, :managers...
имеют в пространстве имен бэкэнд.
Как мне изменить свой код, чтобы разрешить правильные методы видимости?
Динамические методы в контроллеры/backend_controller.rb:
class BackendController < ApplicationController
%w(Manager Receptionist Lifeguard Trainer).each do |k|
define_method "current_#{k.underscore}" do
current_person if current_person.is_a?(k.constantize)
end
define_method "authenticate_#{k.underscore}!" do |_opts = {}|
send("current_#{k.underscore}") || not_authorized
end
define_method "#{k.underscore}_signed_in?" do
!send("current_#{k.underscore}").nil?
end
end
end
Routing:
Rails.application.routes.draw do
devise_for :people, controllers: { sessions: 'devise/sessions' },
skip: [:registrations]
devise_for :clients, skip: :sessions
namespace :backend do
devise_for :receptionists, :managers, :lifeguards, :trainers,
skip: :sessions, controllers: { registrations: 'devise/registrations' }
end
end
Может ли кто-нибудь мне помочь? –