轨道上的红宝石 - 使用多态时如何自定义'CanCan'?



我正在使用名为 acts_as_commentable_with_threading
的 gem它会自动创建注释表,其中有这些列,例如commentable_typecommentable_id等。

它是多态的,并且工作正常。

我有这三个模型。

  • 用户
  • 社区
  • 主题

他们在每个评论下都有评论。

我想让用户删除他的评论或其他人在他的用户页面上的评论。
(他可以删除用户页面上的所有评论)

我想出让它启用以下代码的编码。
但我发现同样的事情也会发生在社区页面和主题页面上。
即使用户不是评论的原始创建者,如果社区/主题的ID与用户ID相同,他也可以删除所有评论。

我只喜欢它启用用户模型。 如何自定义?

模型/能力.rb

can [:create, :destroy], Comment, {:user_id => user.id}
can [:destroy], Comment, {:commentable_id => user.id}

由于您Comment类使用多态关联,因此当前允许delete操作,当commentable_id与用户的id匹配时。由于不同表中可能存在冲突的 ID,因此还需要在commentable_type上进行匹配。尝试这样的事情:

can [:destroy], Comment, {:commentable_id => user.id, :commentable_type => user.class.name}

相关内容

  • 没有找到相关文章

最新更新