2008-09-23 21 views
30

Tengo una pregunta sobre cómo hacer algo "The Rails Way". Con una aplicación que tiene una cara pública y una interfaz de administración, ¿cuál es el consenso general en la comunidad de Rails sobre cómo hacerlo?The Rails Way - Namespaces

¿Espacios de nombres, subdominios o renunciar a ellos por completo?

Respuesta

40

En realidad, no existe un verdadero "camino de rieles" para las interfaces de administración: puede encontrar todas las soluciones posibles en una serie de aplicaciones. DHH ha implicado que prefiere espacios de nombres (con autenticación HTTP básica), pero eso ha seguido siendo una simple implicación y no una de las opiniones oficiales de Rails.

Dicho esto, he encontrado un buen éxito con este enfoque últimamente (espacios de nombres + HTTP Básico). Se ve así:

routes.rb:

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

admin/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 

El condicionada a authenticate_or_request_with_http_basic dispara el HTTP Autorización básica en modo de producción o cuando agrega ?admin_http=true a cualquier URL, por lo que una prueba en sus pruebas funcionales y actualizando manualmente la URL mientras explora su sitio de desarrollo.

+2

Odio esto. Las rutas obtienen nombres incómodos como este: "new_admin_user_path". Es una operación para que un administrador cree un nuevo usuario, no para crear un nuevo usuario administrador. Debería llamarse "admin_new_user_path". Feo. Me hace sospechar que estoy usando espacios de nombres para algo equivocado. – hoff2

5

En algunas aplicaciones más pequeñas, no creo que deba separar la interfaz de administración. Simplemente use la interfaz regular y agregue la funcionalidad de administrador para los usuarios que hayan iniciado sesión.

En proyectos más grandes, me gustaría ir con un espacio de nombres. Usar un subdominio no me parece correcto por alguna razón.

0

Gracias a todos los que respondieron mi pregunta. Parece que el consenso es usar espacios de nombres si lo desea, ya que no hay un enfoque de Rails Way patrocinado por DHH. :)

Nuevamente, ¡gracias a todos!

0

Es tarde para una respuesta, pero realmente necesitaba una respuesta a esta pregunta: ¿cómo hacer fácilmente las áreas de administración?

Esto es lo que se puede utilizar estos días: Active Admin, con Ryan Bates's great intro.