Es gibt keinen wirklichen "Rails-Weg" für Admin-Schnittstellen, eigentlich - Sie können jede mögliche Lösung in einer Reihe von Anwendungen finden. DHH hat angedeutet, dass er Namespaces (mit HTTP-Basic-Authentifizierung) bevorzugt, aber das ist eine einfache Implikation und nicht eine der offiziellen Rails Opinions geblieben.
Das sagte, ich habe in letzter Zeit mit diesem Ansatz guten Erfolg gefunden (Namespacing + HTTP Basic). Es sieht wie folgt aus:
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
Die bedingte auf authenticate_or_request_with_http_basic
löst den HTTP Basic Auth im Produktionsmodus oder wenn Sie ?admin_http=true
an eine beliebige URL anhängen, so dass Sie c Testen Sie es in Ihren Funktionstests und aktualisieren Sie die URL beim Durchsuchen Ihrer Entwicklungsumgebung manuell.
Ich hasse das. Die Routen erhalten peinliche Namen wie diesen: "new_admin_user_path". Es ist eine Operation für einen Administrator, um einen neuen Benutzer zu erstellen und keinen neuen Administratorbenutzer zu erstellen. Es sollte "admin_new_user_path" heißen. Hässlich. Es lässt mich vermuten, dass ich Namespaces für die falsche Sache benutze. – hoff2