如何在Rails中实现行级安全性?

时间:2012-03-19 18:28:48

标签: ruby-on-rails ruby activerecord

我上个月一直在测试Rails,它一直在摇滚! 但我对如何做RLS(行级安全)这一点至关重要,这对我来说至关重要。 我认为我应该使用ActiveRecord Callbacks,但他们只是可以在对象状态发生变化之前或之后被解雇,正如他们所说的那样。

我将使用PostGresSQL,所以我应该使用Views来允许特定的用户/组织只看到他的行,但我宁愿在rails中实现我的RLS的逻辑,而不是直接将它放在我的DB中...

5 个答案:

答案 0 :(得分:2)

我正在开发一个使用Grant的项目。虽然它并不是非常成熟,但它似乎确实在模型中而不是在控制器中很好地锁定了东西,而Rails中的大多数其他“安全”模块都要求你输入逻辑。

控制器级别的安全性实际上只指示 用户可以,而不是他们可以。如果您不小心将错误的资源放在页面上,您可能会无意中泄露您不想要的信息。

那就是说,对于我正在使用CanCan的小项目,只要你小心不要在未经检查的视图中包含资源,它就能正常工作。

无论哪种方式,您都需要一个身份验证系统来记录和退出用户。有一些:设计可能是最广泛使用的。

答案 1 :(得分:1)

答案 2 :(得分:0)

如果“行级别安全性”是指允许用户根据所选行的角色访问特定行,您可以查看declarative_authorization (RailsCast),它允许您使用高级别定义访问规则级别的DSL。您甚至可以根据“行”属性值定义规则。

答案 3 :(得分:0)

看看Heimdallr。这是模型级别限制的一种很棒的方法。适用于ActiveRecord和Mongoid ..也可以简单扩展。

答案 4 :(得分:0)

我最终使用了Devise身份验证中的user_id,将其添加到我希望按行限制的数据库表中。

我在此处写了一些内容: http://marktmilligan.tumblr.com/post/78996534776/adding-row-level-security-to-your-rails-app