2016-02-25 146 views
0

我使用Cancancan設置管理能力。我是這樣一個聯合體,其中一個房間Cancancan通過能力檢查傳遞一個對象

has_one :group, through: :property

我知道,一個人不能使用通過傳遞cancancan的對象,但我們可以通過使用哈希檢查能力。

#ability.rb 

if user.has_role?(:admin)  
    can :manage, Room, :group => { :id => user.group_id } 
end 

當我加載我的索引,顯示,更新,編輯和刪除的方法的上述能力檢查工作,但是當我加載新的方法或創建方法不起作用。 我知道Cancancan會傳遞任何條件作爲散列,如this,但我不認爲它傳遞了我的散列,因爲組是作爲關聯而不是每個房間對象上的列設置的。

#rooms_controller.rb 

class RoomsController < ApplicationController 
    load_and_authorize_resource 
    def new 
     @room = Room.new 
    end 
end 

我的問題是,我怎麼能檢查新的這種能力和創建方法,最好不添加新列到我的對象。

任何幫助表示讚賞

感謝

+0

你什麼時候設置房間屬於哪個組? – Arjan

+0

它通過創建屬性進行設置。每組有大約6個物業,每個物業大約有10個房間。 –

回答

0

如果您正在使用load_and_authorize_resource,你不應該在new方法做@room = Room.newload_and_authorize_resource方法爲你做。所以我的假設是你覆蓋了正在初始化的那個。

除非要重寫圖像的加載方式(加載等等)或搜索,否則這同樣適用於RoomsController中的所有其他方法。

+0

即使'@room = Room.new'被移除,我仍然有同樣的問題 –

+0

另外,我應該補充說,你的問題表明你想在新的/創建方法中檢查這個能力。但是對於新建/創建'load_and_authorize'部分,只是初始化一個值並將其填充到查詢參數中(在創建的情況下)。 B/c你說用戶可以管理'房間',他們可以隨時創建它們。在這種情況下沒有真正的授權(檢查組ID)。 –

+0

但它正在檢查新的並創建。 –