2010-05-09 3 views

ответ

54

Rails имеет встроенный помощник для этого, вы можете поместить это в вашем контроллере приложения:

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

Затем используйте before_filter на все контроллеры, которые вы хотите защитить (или просто вставить его в контроллере приложения чтобы заблокировать весь сайт):

before_filter :authenticate 

Этот метод работает как с Nginx, так и с Apache, что является дополнительным бонусом. Однако он не работает, если включено полное кэширование страниц - поскольку посетитель никогда не попадает в стек Rails; он не надеты.

Редактировать Только что заметил, что вы указали маршрут/admin. Все мои админ-контроллеры наследуются от AdminController. Вы можете установить ваши вверх, как так:

/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 

Тогда есть все контроллеры расширения контроллера администратора, например:

class Admin::ThingsController < Admin::AdminController 

Мои маршруты установлены так:

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

Надеюсь, что это поможет.

+3

awesome .. +1 для аккуратного и чистого объяснения ... –

+0

Это именно то, что я искал. Спасибо! –

+0

Очень хорошее объяснение! – blackbiron

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