2017-07-31 60 views
0

CanCanCan允許我們通過abilities在Rails中快速設置授權。 best practice是使用哈希條件。但是, scopes/blocks允許更復雜的能力創造。可能在CanCanCan has_many關係中使用散列能力?

我想知道是否有一種方法可以將哈希能力用於has_many關係。例如,給定一個has_one創建者和has_many管理員的事件(並且可以更新事件),我相信這個範圍將起作用。

can [:update], Event do |event| 
    event.creator.id == user.id or event.admins.where(user_id: user.id).first.id == user.id 
end 

我們可以轉換爲使用散列嗎?

can [:update], Event, creator: { user_id: user.id } 
can [:update], Event, admins: { user_id: user.id } #<<< Will this work? Any gotchas? 

而且,這將是不錯的散列或一行代碼,但我不能找到一種方法,使這項工作語法。謝謝!

回答