2013-03-04 16 views
6

Używam Rails Admin and Devise dla modelu administratora i użytkownika. Dodałem jedną kolumnę "admin" do modelu użytkownika, aby wskazać jej tożsamość. W config/routes.rb, montuję/admin dla RailsAdmin: EngineUwierzytelnianie za pomocą narzędzia Devise and Rails Admin dla poszczególnych tras

Chcę tylko zezwalać użytkownikom current_user.admin na dostęp/admin, w przeciwnym razie przekieruj użytkownika do strony głównej.

Jak mogę zaimplementować to w najczystszym kodzie?

Odpowiedz

15

na kontrolerów admin:

class MyAdminController < ApplicationController 
    before_filter :authenticate_user! 
    before_filter :require_admin 
end 

na kontrolerze aplikacji:

class ApplicationController < ActionController::Base 


    def require_admin 
    unless current_user && current_user.role == 'admin' 
     flash[:error] = "You are not an admin" 
     redirect_to root_path 
    end   
    end 
end 

Niestety, nie zauważył, że to z szyn administratora, można to zrobić:

# in config/initializer/rails_admin.rb 

RailsAdmin.config do |config| 
    config.authorize_with do |controller| 
    unless current_user.try(:admin?) 
     flash[:error] = "You are not an admin" 
     redirect_to root_path 
    end 
    end 
end 
+0

Dziękuję bardzo. Ale jak mogę nadpisać domyślny silnik Rails_admin? Nie ma kontrolera administracyjnego, który mogę podklasować. – bobzsj87

+0

Zaktualizowałem odpowiedź na silnik administratora szyny – rorra

+0

Świetnie! Dziękuję bardzo! – bobzsj87