【发布时间】:2012-11-16 15:49:15
【问题描述】:
我有一个使用 devise 和 cancan 的 rails 应用程序。
我有一个用户(无论是否登录)都可以阅读的帖子资源:
user ||= User.new
if user.has_role? :admin
can :manage, :all
else
can :read, Post
end
我使用标签系统对帖子进行分类,我想创建一个名为“restricted”的标签,其显示操作仅限于登录用户。
以下是我如何调用带有受限标签的帖子:
@post.tags.find_by_name("restricted")
我应该在控制器中使用 if 语句还是以某种方式限制ability.rb 文件中的操作?
【问题讨论】:
-
我不确定是否理解您的问题,但您可以限制控制器中的操作,例如:
load_and_authorize_resource only: [:new,:create] -
@KienThanh,是的,但只有在帖子具有特定标签时,我才需要限制显示操作,而不是所有显示操作。例如,我有一个标记为“foo”的帖子和一个标记为“restricted”的帖子。登录用户应该能够对两个帖子执行显示操作,应该允许未登录用户查看“foo”帖子,但不能查看“受限”帖子
-
也许你可以在下面添加
can :read, Post这个:cannot :read, Post.join(:tags).where(tags: { name: "restricted" } ) -
@KienThanh,看起来我无法从能力模型中做到这一点:未定义的方法 `join' for #<0x007fdb51b67a90>0x007fdb51b67a90>
标签: ruby-on-rails ruby-on-rails-3 devise cancan