【发布时间】:2019-06-13 11:24:53
【问题描述】:
我创建了一个新的 Rails 项目并添加了用于用户管理的 Devise。我还制作了“posts”和“tags”之类的表格,它们有一个“user_id”字段,因为数据是每个用户的。 现在,我可以在始终将 user_id 作为过滤器的情况下进行查询。这很好用,但恐怕有一天我会忘记过滤 user_id 并且用户可以看到其他用户的数据。 模型中有没有办法强制使用某个过滤器?
对于某些模型,例如“帖子”和“标签”,我希望始终过滤 current_user。有没有办法自动执行此操作,或者如果我忘记过滤用户可能会引发异常?
欢迎任何提示。
(我可以使用像 Apartment 这样的东西,但我现在更喜欢单个数据库/模式)
【问题讨论】:
-
总是从用户开始。
current_user.posts.where(...)而不是Post.where(user_id: current_user.id, ...) -
cancancan 之类的东西也有助于基于所有者的授权。
-
当然还有测试。
-
accessible_by in cancancan 看起来不错。需要进行测试,但我也可以在那里犯愚蠢的错误 :-) current_user.posts.where... 是个好主意。不确定它是否适用于更复杂的查询。
标签: ruby-on-rails