Spring 安全性和需要数据库请求的基于方法的复杂规则



我遇到了一个设计问题。我开始需要实现基于方法的安全性,以确保我的用户不会尝试任何有趣的事情。

我有"拥有"某个业务对象的

用户,他们可以添加其他用户"拥有"该业务对象的子对象。我想检查尝试创建新用户的用户是否确实是将为其添加新用户的对象的父项的所有者。

这不是很清楚,但这是我的问题:当这意味着我需要查询我的数据库以检查权限评估器中的内容时,这是一个非常糟糕的设计吗?如果没有,甚至可能吗?我似乎无法在 SpEL @PreAuthorize规则使用的 PermissionEvaluator 中注入 Spring 组件(例如@Service bean)。

要根据数据库表动态确定权限,Spring 安全 ACL 是最安全的选择。但作为替代方法,您可以创建一个自定义访问决策管理器,该管理器具有查询数据库的自定义投票者。

查看此答案的示例,在您的情况下,您需要一个基于非任何的访问决策投票者,使用经过身份验证的选民来检查用户是否已登录,并使用自定义 DBPermissionVoter 根据参考数据决定用户是否具有权限。

选民是春豆,因此您可以在其中注入所需的任何 DAO 或服务。

最新更新