强制对user_id进行过滤

时间:2019-06-13 11:24:53

标签: ruby-on-rails

我创建了一个新的Rails项目,并为用户管理添加了Devise。我还制作了“ posts”和“ tags”之类的表,它们具有字段“ user_id”,因为数据是按用户划分的。 现在,我可以在其中始终将user_id包含为过滤器的地方进行查询。这可以正常工作,但恐怕总有一天我会忘记对user_id进行过滤,并且一个用户可以看到其他用户的数据。 模型中是否有办法强制使用某个过滤器?

对于某些模型,例如“ posts”和“ tags”,我希望始终根据current_user进行过滤。有没有一种方法可以自动执行此操作,或者如果我忘记对用户进行过滤,也许会引发异常?

欢迎任何提示。

(我可以使用诸如Apartment之类的东西,但现在我更喜欢单个数据库/架构)

1 个答案:

答案 0 :(得分:0)

在用于参数的代理方法中,可以使用require方法来要求user_id字段。因此,如果您像每个人一样禁止直接使用params,那么您的禁忌就会被强制执行。

另一种方法是使用before_action过滤器来检查您的状况。这样,除非您有意从此过滤器中排除一个方法,否则将始终强制执行检查(否则将返回422)。

在模型本身上添加条件对我来说似乎是错误的:因为访问控制是一个正交的功能,并且不应与模型纠缠在一起,所以模型不应该知道访问条件是什么。

相关问题