2012-02-23 83 views
2

我使用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

一种可能的方法:

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 

也许有一个更好的解决办法...