首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Protector保护关联

使用Protector保护关联
EN

Stack Overflow用户
提问于 2013-11-01 12:15:15
回答 1查看 87关注 0票数 0

我想使用Protector来控制未经授权的用户可以在我的模型上看到的字段,但我在使用它来隐藏关联时遇到了麻烦。

我有一个项目模型和一个帖子模型。它们部分看起来像这样。

代码语言:javascript
复制
class Project < ActiveRecord::Base
  has_many :posts
  protect do
    can :read, %w(title)
    cannot :read, %w(posts)
  end

end

class Post < ActiveRecord::Base
  belongs_to :project
  protect do
    cannot :read
  end
end

现在假设我创建了一些如下所示的记录

代码语言:javascript
复制
Project.create(title: 'project one')
User.create(email: 'example@user.com')
Post.create(project_id: Project.first.id, title: 'post one')
Post.create(project_id: Project.first.id, title: 'post two')

当我请求Project.first.restrict!(User.first).posts时,我得到了一个非空的ActiveRecord关系。我不能访问关系中对象的标题,但我可以看到它们的ID和有多少帖子。我更希望能够限制对Project对象的访问,这样就不会返回任何帖子。使用Protector可以做到这一点吗?或者我应该寻找其他解决方案?

EN

回答 1

Stack Overflow用户

发布于 2013-11-01 17:27:07

这里的问题是您滥用了它:)。您不应该试图使您的关联不可读,因为它并不是ActiveRecord的真正值。这是一种关系。

因此,为了让它工作-你必须使用作用域。向您的Post模型添加适当的scope {}。然后,当您在Project上调用.posts时,它将为您提供一个由同一用户限制的Post关系。所描述的Post模型的scope {}也同样适用。

再说一次:不要试图描述相关的模型--使用它们自己的保护块来定义它们的独立行为。这就是Protector的封装方式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19720689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档