Spring Abac数据过滤与Spring @PostFilter

问题描述

我正在使用ABAC模型来保护对项目中某些实体的访问。根据{{​​3}},我可以轻松地定义一些策略规则来更新/删除项目中的实体。 经过数小时的搜索,我遇到了唯一正常记录的过滤用户可用数据的方法:使用Spring security @PostFilter。 问题是这种方法的性能。有什么方法可以将过滤数据的责任转移到数据库,同时又不将业务和角色模型的逻辑混合在一起?

到目前为止,我仅尝试编写JPA规范:负责角色模型的模块考虑了用户的参数(id,group_id / organization_id)来构成逻辑表达式,以及业务需要使用的所有参数。过滤器已添加到 由此类规范表达式组成。但是此解决方案迫使仅使用规范进行数据检索。而且,还不清楚如何将这些表达式存储在策略存储中。

解决方法

您遇到的问题与授权类型有关。我喜欢将其分为3种类型:

  • 功能授权(我可以打印吗?)
  • 交易授权(我可以打印文档#123吗?)
  • 以数据为中心的授权(列出我可以打印的文档)

前两种类型是二进制是/否问题,它们的扩展性很好,即,您询问一项/每条记录并得到一个答案。

第三种类型比较棘手,因为与授权相比,它要过滤的更多。假设您有一百万条记录。您无需反复询问是否可以查看/编辑/打印给定的记录。它不会扩展。您需要做的是逆向处理,并使用部分评估或反向查询。

某些数据库供应商(Informatica ...)和授权供应商(Axiomatics ...)提供了动态过滤数据以实现可扩展授权的能力。我会沿着那条路走下去。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...