假设您正在为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)
这是可能的还是我在接近这个方面感到困惑?
根据当前对象的父级定义一种能力:
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.
| 归档时间: |
|
| 查看次数: |
1810 次 |
| 最近记录: |