2013-04-08 64 views
0

我遇到了一個奇怪的問題,使用Rolify(點擊教程我跟着)Rails:can方法似乎不起作用,因此呈現用戶權限不可用。以下是我的ability.rb文件和控制檯輸出,其中顯示了問題。Rolify異常返回false

class Ability 
    include CanCan::Ability 

    def initialize(user) 

    user ||= User.new # guest user (not logged in) 

    if user.has_role? :admin 
     can :manage, :all 
    else 
     can :read, :all 
    end 

    end 
end 

控制檯測試($ rails console

user = User.find(2) 
user.add_role "admin" 
user.has_role? :admin 
=> **true** 

ability = Ability.new(user) 
ability.can? :manage, :all 
=> **false** 
ability.can? :read, :all 
=> **false** 

我還檢查在數據庫中,所有的關係的設置是否正確。我正在運行rails 3.2.13。

+0

當您測試'ability.can?'時,您是否嘗試過傳遞實際模型或模型類而不是':all'? – PinnyM 2013-04-08 22:00:53

回答

1

問題是與canarddeclarative_authorization的寶石衝突。禁用並重新啓動rails服務器解決了這個問題。也許這會幫助其他人嘗試這些不同的寶石走上同樣的道路。

0

CanCan依賴於current_user方法的存在,它將返回當前登錄的用戶。如果您使用例如設計進行身份驗證,則此方法在那裏。如果你正在使用別的東西,那麼你必須確保current_user方法在那裏。