-
11-09-2019 - |
题
我有 rails_authorization_plugin 的启动和运行模式
什么是执行我的网站上的权限检查的最佳方式?
我有复杂的,用于当一个对象的实例应该是可见的条件下,是有一种有效的方式将它们链在一起,因此我不读取数据的多组和研磨我的DB作为遍历返回的数据的结果过滤它?
解决方案
有是一种有效的方法:确保你只运行一个查询,该查询运行的回报正是你想要的对象。说起来容易做,当然。
要处理的一种方法是使用范围来构建你的条件。
@posts = @thread.posts.not_deleted.this_week.not_secret
如果所有这些方法都是范围,那将是只有一个查询。
如果你的条件太复杂,很容易让他们范围,你应该只写返回可见对象的用户的方法。
class User
def posts_for(thread)
if is_admin?
thread.posts
elsif thread.owner == self
thread.posts.not_deleted
else
Post.find(:all, :conditions => something_complicated(thread, self))
end
end
end
我的应用程序有很多类型的对象,而且非常复杂的权限的,所以我们抓住这样与method_missing的电话,他们的路线,知道如何使所有不同的查询权限库。
不隶属于 StackOverflow