我在一家公司工作,开发一个应用程序,用户有各种类型的数据的CRUD。众所周知,数据可能是敏感的,取决于类型。
首先,在我的公司里,我们有不同类型的“角色”。不同的角色可以看到不同的数据,这取决于角色的类型。听起来有点奇怪的是,我们必须手动过滤数据,我们在系统上的每个查询,都有带规则的where子句,我们看起来不对。我们使用Hibernate来执行我们的DAO。
第二,在我的应用程序上,它有点不同,但有相同的目标。用户插入数据,他们只能看到自己的数据。当他们想要的时候,每个人都有一个过滤器。我使用mongodb与morphine,我必须通过“用户”过滤,但取决于我正在寻找的文档,用户是在不同的级别。
范例:
- 每个基金都有一个用户;
- 每笔交易都有资金;
如果我列出的资金的用户我有以下文件:
[
{
"description": "xpto",
"user": {
"login": "Someone"
}
}
]
如果我列出了用户的交易,我有以下文档:
[
{
"value": 1234.23,
"date": "2017-01-01",
"fund": {
"description": "xpto",
"user": {
"login": "Someone"
}
}
}
]
所以,在查询资金我有这个:
datastore.find(Fund.class).filter("user.login", getUser().getLogin());
在交易中:
datastore.find(Transaction.class).filter("funds.user.login", getUser().getLogin());
我做了一些研究,发现了一些我不太清楚的结果:
- 行级安全性;
- @Filter在休眠状态
行级安全,最好由数据库来做。因此,每次查询,数据库都会查看规则并过滤数据。看起来很棒,但是,我怎么告诉数据库什么用户?我的系统的每个用户,都必须在数据库中授权?必须是数据库中的用户?
@Filter in hibernate,和i一样,但至少它在类中。在每一个查询中,我都必须说什么是必须过滤的。是我最后的选择。
我的目标是了解它现在是如何工作的?trello如何知道哪些卡是用户的?Facebook如何知道哪个帖子是你的?他们如何过滤数据集?在每个查询中进行过滤是正常的吗?他们是在数据库中还是在应用程序中执行这些操作?
1条答案
按热度按时间vsnjm48y1#
行级安全性我认为您不希望在数据库上使用行级安全性。只有在给予数据用户直接访问数据库的权限时才需要这样做。如果您给予仅由API访问的权限,则可以让API处理所有过滤(并限制它们查询过滤的方式!因为通常你想保持你的数据库赠款相当静态,而不是让DBA每次都改变权限(除非你只有几个大的数据库用户,这不会经常改变,这将是一个选项)。
在休眠中过滤我对这个感到困惑。You mention SQL/Hibernate en Mongodb/Mortgage.两种不同的对象Map器,用于两种不同的数据库类型。我也不会把这个选项叫做“Filter by Hibernate”。让我们将其命名为 “filter by API” 并使用facade design pattern。facade类将位于Morphine和Hibernate API的前面,并且API用户只能通过此API访问数据库。