2010-05-09 11 views

Odpowiedz

54

Rails ma wbudowany pomocnik dla tego, można umieścić to w kontrolerze aplikacji:

protected 
    def authenticate 
    authenticate_or_request_with_http_basic do |username, password| 
     username == "admin" && password == "test" 
    end 
    end 

Następnie użyj before_filter na wszelkich sterowników, które chcesz chronić (lub po prostu trzymać go w kontrolerze aplikacji do zablokowania całej witryny):

before_filter :authenticate 

Ta metoda działa na Nginx i Apache, co stanowi dodatkowy bonus. Nie działa to jednak, jeśli włączone jest pełne buforowanie stron - ponieważ użytkownik nigdy nie trafi na stos Railsów; to się nie włączy.

Edytuj Po prostu zauważyłeś, że podałeś/admin route. Wszystkie moje kontrolery administracyjne dziedziczą z kontrolki AdminController. Można ustawić je się tak:

/app/controllers/admin/admin_controller.rb

class Admin::AdminController < ApplicationController 
    before_filter :authenticate 
    protected 
    def authenticate 
     authenticate_or_request_with_http_basic do |username, password| 
     username == "admin" && password == "test" 
    end 
    end 
end 

wtedy wszystkie kontrolery przedłużyć kontrolera administratora, np

class Admin::ThingsController < Admin::AdminController 

Moje trasy są ustawione tak:

map.namespace :admin do |admin| 
    admin.resources :things 
end 

Nadzieję, że pomaga.

+3

niesamowite .. +1 za zadbane i czyste wyjaśnienie ... –

+0

To jest dokładnie to, czego szukałem. Dziękuję Ci! –

+0

Bardzo ładne wyjaśnienie! – blackbiron

Powiązane problemy