2013-03-04 68 views
6

我使用Rails Admin和Devise進行管理和用戶模型。我在用戶模型中添加了一列「admin」來表示它的身份。在config/routes.rb中,我mount/admin for RailsAdmin:引擎使用Devise和Rails Admin進行特定路由驗證

我想只允許current_user.admin用戶訪問/ admin,否則將用戶重定向到主頁。

我該如何在最乾淨的代碼中實現它?

回答

15

在你的管理控制器:

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

您的應用程序控制器上:

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 

對不起,沒注意它與軌道管理員,你可以這樣做:

# 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

非常感謝。但是我怎樣才能覆蓋默認的Rails_admin引擎?沒有可以繼承的admincontroller。 – bobzsj87 2013-03-05 16:18:55

+0

我更新了rails管理引擎的答案 – rorra 2013-03-05 19:45:14

+0

太棒了!非常感謝! – bobzsj87 2013-03-07 04:46:57