Как да постигнем отделен администратор (с пространство от имена или с обхват) с два модела на проектиране (потребител и администратор) в Rails 3?

Приемете това като предизвикателство, а не като общ подход. Причината, поради която споменавам това, е, че обикновено се предпочита да се включват функции, достъпни за администратори, в обществеността преден сайт. Това е необходимото:

  • Създайте модел за потребители, посетители, които имат достъп до публичния сайт
  • Създаване на модел за администратори
  • Пространство от имена или обхват на административната „област“ до /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