2009-03-28 13 views
7

Ich arbeite an meiner ersten Rails-Anwendung und möchte einen Admin-Bereich erstellen.Rails Application Admin Section

Soll ich meine Ansichten und Controller vollständig getrennt (dh in separaten Verzeichnissen) für den Admin-Bereich und den Rest der Site halten?

Wie kann ich meine Ansichten/Controller in benutzerdefinierten Verzeichnissen organisieren (wie konfiguriere ich das Routing)?

Antwort

5

Sie könnten:

script/generate controller admin/articles 

Dann in Ihrer routes.rb Datei

map.resource :admin do |admin| 
    admin.resources :articles, :path_prefix => "admin", :name_prefix => "admin_", :controller => "admin/articles" 
end 

Sie dann den Index-URL für diese zugreifen können Bewahren Sie auch die Apps und Controller an ihren gewohnten Plätzen auf und verwenden Sie Rails-Filter, um den Zugriff zu kontrollieren, was ich denke, dass Sie hier suchen.

Wenn Sie das AWDWR Buch zur Hand haben, drehen sie auf Chap11 Aufgabe F Administrivia

  • Grundsätzlich eine authorise Methode in app \ Controller definieren \ application.rb, die Autorisierung überprüft, leitet zur Login-Seite, wenn nicht angemeldet et.all
  • Mark-Controller möchten Sie mit before_filter s Zugang zu

beschränken.

class AdminController < ApplicationController 
    before_filter :authorize 
    # ... the rest of the code 
end 

Dadurch werden alle Anrufe an Aktionen in Admincontroller definiert abzufangen und sie zwingen, über zu gehen autorisieren

+0

Könnte das Routing komplizieren? Ich mag auch die Idee, separate Verzeichnisse zu haben, nur um die Dinge ordentlicher zu halten. – GeekJock

+0

Überhaupt nicht. Die Schönheit ist, dass Sie nicht verschiedene Routen definieren (oder sogar durcheinander bringen) müssen. Alles geht über einen einzigen Pfad, das authorize before_filter stellt sicher, dass nur autorisierte Anfragen zu den geschützten Aktionen gelangen. Es ist ein "deklarativer" Ansatz. – Gishu

+2

Dieser Ansatz ist in Ordnung, aber nicht immer angemessen, besonders wenn Sie ein fast CMS haben wollen wie Admin-Bereich im Gegensatz zu ein paar Admin-Ressourcen durch Ihre Anwendung verstreut. – nitecoder

8

Ihrer Admin-Controller erstellen:

<%= link_to "Articles Admin", admin_articles_path %> 
5
map.namespace :admin do |admin| 
    admin.register :controller => 'main', :action => 'register' 
    admin.login, :controller => 'main', action => 'login' 
    # ... 
end 

Dies ist, wie Sie die Dinge Namespace, fügen Sie diese an die anderen Kommentare hier über die Genehmigung Dinge, und Sie bist weg. Sehen Sie sich das restful_authentication-Plugin an, um Ihre Benutzerverwaltung schneller und einfacher durchzuführen als Ihre eigenen.

Das obige Routing nimmt an, dass die Controller und ihre Ansichten in einem Unterverzeichnis namens admin liegen, was ich denke, was Sie wollen.

Verwandte Themen