可以在CanCanCan has_many关系中使用哈希能力吗?

时间:2017-07-31 19:35:59

标签: ruby-on-rails authorization ruby-on-rails-5 cancancan

CanCanCan允许我们通过abilities在Rails中快速设置授权。 best practice是使用哈希条件。然而,  scopes/blocks允许更复杂的能力创造。

我想知道是否有一种方法可以将哈希技能用于has_many关系。例如,给定一个has_one creator和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?

另外,在一行代码中使用哈希值会很好,但是我找不到一种方法来使语法在语法上有效。谢谢!

1 个答案:

答案 0 :(得分:0)

使用哈希工作得很好,虽然看起来你不能在设计的一行上做到 - https://github.com/CanCanCommunity/cancancan/wiki/defining-abilities#combining-abilities