2013-09-30 17 views
0

在項目中,我使用設計befor_filter授權取決於CONTROLLER_NAME

,但我想如果用戶是管理員,他可以進入所有控制器 但如果用戶是普通用戶,他可以輸入特定的控制器

這是我的代碼:

before_filter :authorize! 
def authorize! 
     unless current_admin.is_admin? 
     flash[:alert] = "unauthorized access" 
     redirect_to root_path 
     end 
    end 

我怎樣才能在授權方法 得到控制器的名稱,例如,如果控制器名稱爲「儀表板」或「站」的普通用戶可以看到的數據。

感謝

回答

0

控制器的名字可在params[:controller]和行動params[:action]

不過,我會建議增加一個AdminController.rb文件

#controllers/admin_controller.rb 
class AdminController < ApplicationController::Base 
    before_filter :authorize! 
    def authorize! 
     unless current_user.is_admin? 
     flash[:alert] = "unauthorized access" 
     redirect_to root_path 
     end 
    end  
end 

和繼承,只有管理員可以訪問像下面

# controllers/admin_only_controller 
class AdminOnlyController < AdminController 
end 

這樣就可以分別管理普通用戶控制器和管理控制器的所有控制器。

0

您可以使用controller_name

如果你想獲得動作名稱 - 使用action_name

0

實際上兩個答案都OK

的PARAMS [:控制器]是更好,因爲它也包含了命名空間。

這是我的最終代碼。 任何想法寫的更好這個和平的代碼是受歡迎的

def authorize! 
    unless current_admin.is_admin? 
     case current_admin.type 
      when :station_admin 
       station_admin_allows_controllers = ["radio/stations","radio/dashboard"] 
       unless station_admin_allows_controllers.include?(params[:controller]) 
        flash[:alert] = "unauthorized access" 
        redirect_to root_path 
       end 
      end 
    end 
    end