【发布时间】:2016-06-14 23:09:37
【问题描述】:
在我的数据库中,我有属于不同用户的数据。 在代码中,对数据库的请求是通过不同的方式发出的:
-
使用标准:
从代码中的一处(公共父 DAO)
来自代码中的许多地方(子 DAO)
-
使用 HQL 查询:
- 同样的两种方法
现在,我想确定的是,任何程序员,无论他以何种方式向 DB 发出请求,都不会犯错误而忘记通过 user_id 从任何表中过滤数据。该值是当前用户的id。 (如果一个表没有这样的列,这意味着它的数据应该可供所有用户访问,那么应该忽略过滤)。
理想情况下,这种过滤将在更深层次的某个地方自动执行,而不是在我们编写和重写的代码中。有可能吗?
【问题讨论】:
-
您能详细说明一下吗?程序员可以通过查询或验证实体类来检查表是否有user_id列。
-
@Lathy 问题是程序员对一个实体类(每个)有一些事情要做 - 验证查询。他可能会忘记这样做。错误的代价——侵犯用户数据安全。
-
获取当前正在使用的实体类的元数据,这将为您提供其中使用的属性,您可以迭代属性以查找该实体是否具有 user_id 并根据结果您可以应用过滤器。
-
上面也可以借助interceptors/aop进行泛化
-
@Lathy 非常概括是我问题的主题。
标签: java hibernate hql hibernate-criteria