环境:Rails 3.2.13 + simple_form
2.1.0 + CanCan 1.6.10 +等。
模型缩略图:Article
有作者(User
s)和Comment
s。 Comment
是Article
中的嵌套资源。 Comment
模型包括内容,评论者(当前登录的用户ID)和文章ID。
问题:在Comment
上创建新的Article
会导致更新Article
,这是可以理解的。目前,CanCan的Ability
类是硬连线的,允许该用户更新Article
。我想将此限制为允许在Article
的{{1}} s - 和仅该字段 - 更新时允许更新。我一直在Comment
探索几个小时,试图找出如何判断更新的内容,并且到目前为止一直是空白。
模型发布在this Gist以回应Michael Szyndel的问题。
帮助?
答案 0 :(得分:1)
代替识别罪魁祸首,我认为与依赖 accepts_nested_attributes_for
有关,我宁愿提供解决方案 - 实施before_update
回调在Article
模型上。
before_update :verify_update_authorization
# virtual attribute to supply CanCan a user candidate
def initiator
@initiating_user if @initiating_user
end
def initiator=(user)
@initiating_user = user
end
private
def verify_update_authorization
return false if Ability.new(initiator).cannot?(:update, self)
end
然后,当需要更新时,控制器需要设置Article的虚拟属性。 在这种特殊情况下,覆盖InheretedResources更新操作是合适的。