2011-01-19 267 views
8

A有一堆帶有Admin命名空間的控制器。我想限制訪問這些,除非用戶是管理員。有沒有辦法使用CanCan做到這一點,而無需致電未經授權!在每個控制器的每個方法中?CanCan的管理員授權

回答

8

將一個應用程序控制器添加到您的名稱空間和一個過濾器之前。

class ApplicationController < ActionController::Base 
end 

class Admin::ApplicationController < ApplicationController 
    # these goes in your namespace admin folder 
    before_filter :check_authorized 

    def check_authorized 
    redirect_to root_path unless can? :admin, :all 
    end 
end 

class SomeadminController < Admin::ApplicationController 
    def some_action 
    # do_stuff 
    end 
end 
0

現在rails_admin有慘慘的全力支持,你可以在其官方網站上找到它,就有關該主題的維基頁面:

Rails Admin's authorization with CanCan

+0

他提到了rails_admin嗎? – 2014-02-16 02:04:59

1

的康康舞列出的Admin Namespaces wiki頁面解決這個問題的幾個解決方案。

  • 正如@mark建議的,爲管理員設置一個基本控制器,用於檢查每個操作的授權。
    • 如果您只需檢查用戶是否有admin 標誌,則可能完全不需要使用CanCan。
  • 對於彼此不同地處理管理員(從只有普通用戶而非不同), 考慮單獨AdminAbility類(這是一個有點偏離主題,但可以證明相關)。
相關問題