你如何处理a:在父对象定义的cancan中创建权限?

Pet*_*xey 7 cancan

假设您正在为Blogger编写软件.

每个用户只有在博客所有者的情况下才能创建博客文章.CanCan通常会在这种情况下定义能力检查:

user.can? :create, Post
Run Code Online (Sandbox Code Playgroud)

但是,如果用户是当前博客的所有者,则用户只能创建帖子,并且无法仅使用其类名引用当前博客.我真正需要做的是:

user.can? :create, Post, @current_blog
Run Code Online (Sandbox Code Playgroud)

我可以说,在康康的定义中

can :create, Post do |post, blog|
  user == blog.owner
end
Run Code Online (Sandbox Code Playgroud)

这是可能的还是我在接近这个方面感到困惑?

dle*_*man 8

根据当前对象的父级定义一种能力:

can :create, Post, :blog => { :user => user }
Run Code Online (Sandbox Code Playgroud)

这将确保当前用户只能为他们所有的博客创建新的Post记录.

  • 用于Post.blog_id查找父Blog记录
  • 比较Blog.user_id字段到current_user.id字段

还要确保:through在加载和授权Post资源时使用声明,因此CanCan知道父记录是谁.

PostsController:

load_and_authorize_resource :through => :blog
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅GitHub上的CanCan wiki.