Как добиться отдельного администратора (с пространством имен или областью действия) с двумя моделями устройств (пользователь и администратор) в Rails 3?

Рассматривайте это как вызов, а не общий подход. Причина, по которой я упоминаю об этом, заключается в том, что обычно предпочтительнее включать функции, доступные администратору, в public. перед сайтом. Вот что требуется:

  • Разработка модели для пользователей, посетителей, обращающихся к общедоступному сайту
  • Разработка модели для администраторов
  • Пространство имен или область «области» администратора до /admin. Администраторы могут войти только с этого маршрута.
  • Пользователи могут зарегистрироваться непосредственно с общедоступной целевой страницы сайта; они не обязаны посещать /users/sign_up в соответствии с маршрутом, сгенерированным устройством по умолчанию.
  • Рассмотрите возможность переопределения контроллеров устройств по умолчанию.

Спасибо, Майк.


person Michael De Silva    schedule 12.05.2011    source источник


Ответы (1)


Следующее кажется, что я добился некоторого прогресса в правильном направлении; это, по крайней мере, обеспечивает идентичную готовую функциональность устройства как для пользователей, так и для администраторов с настраиваемой маршрутизацией,

  match 'admin', :controller => 'admin'

  namespace :admin do
    # to be updated later... 
  end

  devise_for :users
  #devise_for :admins, :path => "admin"  # this works but uses the default
                                         # Devise::SessionController
  devise_for :admins, 
    :controllers => { 
      :sessions => "admin/sessions", 
      :passwords => "admin/passwords",
      :registrations => "admin/registrations" }, :path => "admin",
    :skip => [:sessions, :passwords, :registrations] do
    get 'admin/sign_in' => 'admin/sessions#new', :as => :new_admin_session
    post 'admin/sign_in' => 'admin/sessions#create', :as => :admin_session
    get 'admin/sign_out' => 'admin/sessions#destroy', :as => :destroy_admin_session

    get 'admin/sign_up' => 'admin/registrations#new', :as => :new_admin_registration
    get 'admin/account' => 'admin/registrations#edit', :as => :edit_admin_registration
    post 'admin/account' => 'admin/registrations#create', :as => :admin_registration
    get 'admin/cancel' => 'admin/registrations#cancel', :as => :cancel_admin_registration
    put 'admin/account' => 'admin/registrations#update'
    delete 'admin/account' => 'admin/registrations#destroy'

    post 'admin/password' => 'admin/passwords#create', :as => :admin_password
    get 'admin/password/new' => 'admin/passwords#new', :as => :new_admin_password
    get 'admin/password/edit' => 'admin/passwords#edit', :as => :edit_admin_password    
    put 'admin/password' => 'admin/passwords#update'
  end

Идеи?

Предостережение: в этом примере я включил модуль :registerable devise в модель администратора просто для тестирования во время разработки. Маршрут sign_up в конечном итоге будет удален.

Многочисленные поиски привели (обратите внимание на каламбур) следующую запись в блоге, которая кажется чтобы указать, что переопределение контроллера устройства требует повторного сопоставления всех указанных им «HTTP-команд», как это было; это имеет смысл, так как несопоставленные будут обрабатываться контроллером устройства по умолчанию.

Если у кого-то больше опыта работы с несколькими моделями разработки и раздельным подходом к администрированию, мне будут очень интересны ваши мысли и предложения!

person Michael De Silva    schedule 13.05.2011
comment
Можете ли вы написать свой код контроллера? Мне нужна эта функция. Большое тебе спасибо! - person hyperrjas; 01.10.2012