【发布时间】:2013-12-04 05:02:53
【问题描述】:
问题
- 用户通过应用程序验证
- 简单的数据库架构:用户 ---> 文档 ---> 项目
- 用于访问文档项的 API
如果登录的用户知道属于其他用户的项目的 ID,他就可以访问它。 我想阻止这种行为。
解决方案
我找到的第一个解决方案是在每个表中的每个记录中添加一个 userid 字段,以便在每次查询时检查该记录是否属于已登录的用户。
这是一个好的解决方案吗?你知道一些更好的设计模式来防止用户访问其他用户的数据吗?
谢谢
【问题讨论】:
-
您不应该允许用户输入他们的“ID”作为参数。这应该存储在会话或其他内部数据存储中,并且不应被允许对其进行编辑。
-
我认为更好的解决方案是:我将用户 ID 存储在会话中,并为每个表添加字段用户 ID。这样在每次查询时我都可以检查记录的所有权
-
您无需更改存储数据的方式即可实现此目的。我不确定您使用的是哪个数据库。请考虑使用视图而不是更改架构。
-
我使用的是 NOSql 数据库
-
我现在明白为什么您更喜欢将 UserId 添加到每个项目。我不确定 NOSql 是否适合这种架构,但我不是这方面的专家。祝你好运。
标签: database design-patterns database-design data-structures architecture