2011-10-24 105 views
4

我有一個簡單Ability.rb設置如下:Rails的康康舞哈希不工作

if user.role? :super_admin 
    can :manage, :all 
elsif user.role? :registered 
    can :review, [Card, Deck], :visible => true 
end 

alias :review => :index, :list, :show, :to。 Card和Deck表都有帶布爾選項的可見列。目前表中的每個對象都有:visible => false。因此,我預計具有註冊角色的用戶將無法使用任何對象,但情況並非如此。在控制器級別的限制工作正常(編輯和刪除不可訪問),但我似乎無法限制使用條件的散列查看資源。有什麼想法嗎?

編輯:我有兩個控制器中的authorize_resource。使用Ruby 1.9.2,Rails 3.1和CanCan 1.6.7。我使用devise 1.4.9進行身份驗證。 MySQL是數據庫。

編輯: 嗯..我想出了一種方法來限制基於條件的資源。儘管我在我的所有控制器中都有authorize_resource(並且它用於限制對方法的訪問),但我必須將authorize!添加到我想要限制資源的方法中。例如,以限制與:visible => true條件橋面表演動作,我不得不添加authorize!這樣:

def show 
    @deck = Deck.find(params[:deck_id] 
    authorize! :review, @deck 
end 

說實話,我很不滿意這個解決方案,因爲我沒有看到原因爲什麼authorize_resource不起作用。我很想看到一個解釋。

+0

更換authorize_resource有同樣的問題,你有沒有結束找到一個合適的解決方案? – twe4ked

+1

不幸的是,我還沒有找到解決方案。該項目被放棄了,我在未來的項目中沒有遇到這個問題。 – Viet

回答

0

你打電話

load_resource_authorize_resource 
在控制器

就這樣,或者是你,包括一個模型來授權?

我發現我可以複製你的問題,如果我鍵入類似:

load_resource_authorize_resource Deck 

我想原因後不工作,因爲你是問康康舞授權「甲板」隨意,而不是授權控制器操作,這是你真正想要做的。

0

哼,重啓服務器?你的代碼對我來說很好。

+0

相信我,當我說我必須重新啓動服務器一個淫穢的次數:(我希望這是解決方案,但事實並非如此。 – Viet

1

也許你可以看到這個話題: Cancan condition

我和你同樣的問題,我通過該主題解決它, 我通過load_and_authorize_resource

相關問題