2010-11-25 24 views
1

這似乎是一個簡單的問題,我只是無法環繞我的頭。從CanCan等訪問設計輔助方法

在新的Rails 3應用程序中使用Devise進行身份驗證和CanCan授權。

如何訪問CanCan提供的Ability類中的ApplicationController中定義的方法?

亦稱,這樣的事情:

class Ability 

    include CanCan::Ability 

    def initialize(user) 

    user ||= User.new # Guest user. 

    can :create, Post if user_signed_in? 

    end 
end 

其中user_signed_in?ApplicationController定義。

回答

3

這可能不是你想要的答案,但它似乎是你想混合不應該混合的代碼問題。

在授權規則中訪問user_signed_in?是個好主意嗎? ...由於授權只關心某人可以做什麼,並且不應關心該人是否被認證(或不認可)。

在您的Posts控制器上過濾器(before_filter :authenticate_user!)之前檢查您的用戶是否已通過身份驗證應該足以實現您的目標;您的授權規則可以運行以及身份驗證檢查,而不是與其代碼混淆。

這是:-)

+1

分層的方法你可能想誰沒有登錄用戶能夠讀取一個資源,但不能寫呢?這是比'authenticate_user`更細化會提供。 – 2012-02-03 02:39:45