2008-09-23 2 views
30

У меня вопрос о том, как что-то сделать «Rails Way». С приложением, которое имеет открытую сторону и интерфейс администратора, каков общий консенсус в сообществе Rails о том, как это сделать?The Rails Way - Пространства имен

Пространства имен, субдомены или вообще их не имеют?

ответ

40

Нет реального «пути Rails» для админ-интерфейсов, на самом деле - вы можете найти все возможные решения в ряде приложений. DHH подразумевает, что он предпочитает пространства имен (с базовой аутентификацией HTTP), но это остается простым следствием, а не одним из официальных мнений Rails.

Сказанное, я нашел хороший успех с этим подходом в последнее время (namespacing + HTTP Basic). Это выглядит следующим образом:

routes.rb:

map.namespace :admin do |admin| 
    admin.resources :users 
    admin.resources :posts 
end 

админ/users_controller.rb:

class Admin::UsersController < ApplicationController 
    before_filter :admin_required 
    # ... 
end 

application.rb

class ApplicationController < ActionController::Base 
    # ... 

    protected 
    def admin_required 
    authenticate_or_request_with_http_basic do |user_name, password| 
     user_name == 'admin' && password == 's3cr3t' 
    end if RAILS_ENV == 'production' || params[:admin_http] 
    end 
end 

Условный на authenticate_or_request_with_http_basic запускает HTTP Базовый auth в режиме производства или при добавлении ?admin_http=true к любому URL-адресу, поэтому вы c проверить его в своих функциональных тестах и ​​вручную обновить URL-адрес при просмотре сайта разработки.

+2

Ненавижу это. Маршруты получают неудобные имена: «new_admin_user_path». Это операция для администратора для создания нового пользователя, а не для создания нового пользователя-администратора. Его следует называть «admin_new_user_path». Некрасиво. Это заставляет меня подозревать, что я использую пространства имен для неправильного. – hoff2 2013-04-20 19:55:18

5

В некоторых небольших приложениях я не думаю, что вам нужно разделить интерфейс администратора. Просто используйте обычный интерфейс и добавьте функции администратора для зарегистрированных пользователей.

В больших проектах я бы пошел с пространством имен. По какой-то причине использование субдомена мне не кажется правильным.

0

Спасибо всем, кто ответил на мой вопрос. Похоже, что консенсус заключается в использовании пространств имен, если вы хотите, поскольку не существует метода поддержки Rails Way, поддерживаемого DHH. :)

Опять же, спасибо всем!

0

Его наверняка опоздали на ответ, но мне действительно нужен был ответ на этот вопрос: как легко делать админ-зоны?

Это то, что может быть использовано в наши дни: Active Admin, with Ryan Bates's great intro.

Смежные вопросы