我创建了一个新的Rails项目,并为用户管理添加了Devise。我还制作了“ posts”和“ tags”之类的表,它们具有字段“ user_id”,因为数据是按用户划分的。 现在,我可以在其中始终将user_id包含为过滤器的地方进行查询。这可以正常工作,但恐怕总有一天我会忘记对user_id进行过滤,并且一个用户可以看到其他用户的数据。 模型中是否有办法强制使用某个过滤器?
对于某些模型,例如“ posts”和“ tags”,我希望始终根据current_user进行过滤。有没有一种方法可以自动执行此操作,或者如果我忘记对用户进行过滤,也许会引发异常?
欢迎任何提示。
(我可以使用诸如Apartment之类的东西,但现在我更喜欢单个数据库/架构)
答案 0 :(得分:0)
在用于参数的代理方法中,可以使用require
方法来要求user_id
字段。因此,如果您像每个人一样禁止直接使用params
,那么您的禁忌就会被强制执行。
另一种方法是使用before_action
过滤器来检查您的状况。这样,除非您有意从此过滤器中排除一个方法,否则将始终强制执行检查(否则将返回422)。
在模型本身上添加条件对我来说似乎是错误的:因为访问控制是一个正交的功能,并且不应与模型纠缠在一起,所以模型不应该知道访问条件是什么。