使用 Spring 安全性,管理查询响应授权的正确方法是什么?

Using Spring Security, what's the right way to manage authorization to query responses?

使用 Spring 安全性(3.2.5 版),管理查询响应授权的正确方法是什么?

我已配置 Spring 安全性以根据用户角色控制对系统不同部分的访问。但在许多地方,委托人正在查询数据(例如,通过 him/her 查找以前保存的详细信息 "owned")。

简单的用例可以在代码中简单地处理,但我们有一个更复杂的数据检索用例,我想要一个更集中的授权引擎,我正在尝试利用 Spring 安全性这个。

大多数示例和在线指针似乎都集中在锁定 API 调用而不是这些调用生成的数据上。 (用户级别与角色级别)。

是否有任何关于如何完成此操作的指示或侧重于应用层数据访问的教程?

TIA。

您正在尝试查询用户可能不是其所有者但无论如何都应该能够访问的项目列表,是吗?比如共享文档之类的。

如果是这种情况,您需要升级到 Spring Security 4。它允许使用 Spring 数据的 SpEL 表达式。示例:

@Query("select m from Message m where m.to.id = ?#{ principal?.id }")

参见:

http://docs.spring.io/spring-security/site/docs/4.0.x/reference/htmlsingle/#data

您需要在 SQL 中执行此操作,而不是在 @PostAuthorize 中执行此操作,因为后者会搞砸分页。

如果您有预算,我会选择 Oracle VPD。

如果你能等到 9 月,Postgres 9.5 将具有行安全性。

一些杂谈在这里分享:http://blog.databasepatterns.com/2014/12/postgresql-row-security-sharing-rls-vpd.html