2009-07-07 124 views
2

我已经有rails_authorization_plugin启动并使用模型运行。何时何地实施ACL

在我的网站上实施权限检查的最佳方式是什么?

我有一个复杂的条件,当一个对象的实例应该是可见的,是否有一种有效的方式将它们链接在一起,所以我没有获取多组数据,并且由于循环返回数据而磨损了我的数据库过滤它?

回答

1

有一种有效的方法:确保只运行一个查询,并且运行的查询完全返回所需的对象。当然,说起来容易做起来难。

处理此问题的一种方法是使用范围构建您的条件。

@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这样的电话,他们的路线,知道如何使所有不同的查询权限库。

+0

嗯,我正在使用非常简洁的rails acl插件,但我不认为我可以用它来链接,我可以吗? 是否有任何ACL插件的行为几乎像是activerecord的扩展? rails acl的文档提供了很多开始,但实际上实施安全检查让我猜测很多。 感谢您的帮助,真的很好的建议已经在这里! – 2009-07-09 17:01:42