通过关系的cancan能力

时间:2012-02-23 17:22:49

标签: ruby-on-rails-3.1 cancan

我正在使用CanCan来定义用户的能力,但我只是遇到了障碍,我试图只允许用户通过它的父级来管理模型。

例如。 一本书有一个作者,一本书有很多章节。 我只希望作者能够管理章节。 我的书模型有一个author_id。 我的章节模型有一个book_id。

在我的Ability.rb文件中

 user.has_role? :author
            can :manage, Book, :author_id => user.id
            can :manage, Chapter
            can :read, :all
        else

但我没有在文档中的任何地方看到我定义作者只能管理本书的章节。是否有其他方式来授权一本书及其所有关系?或者我应该以某种方式将章节定义为属于本书?我没有通过书籍模型保存章节(它不是嵌套的)。

1 个答案:

答案 0 :(得分:1)

可能的方法:

 user.has_role? :author
            can :manage, Book, :author_id => user.id
            can :manage, Chapter do |chapter|
              chapter.book.author_id == user.id
            end
            can :read, :all
        else

也许有更好的解决方案......