我有一个设计问题。我开始需要实现基于方法的安全性,以确保我的用户不会尝试任何有趣的事情。
我让用户“拥有”某个业务对象,该业务对象可以添加其他用户“拥有”此业务对象的子级。我想要检查的是,尝试创建新用户的用户确实是将添加新用户的对象父的所有者。
目前还不是很清楚,但这是我的问题:当它意味着我需要查询我的数据库以检查PermissionEvaluator中的内容时,这是一个非常糟糕的设计吗?如果没有,它甚至可能吗?我似乎无法在SpEL @PreAuthorize规则使用的PermissionEvaluator中注入Spring组件(例如@Service beans)。
答案 0 :(得分:1)
要基于数据库表动态确定权限,Spring安全ACL是最安全的选择。但作为替代方案,您可以创建一个自定义访问决策管理器,该管理器具有查询数据库的自定义选民。
检查example的答案,在您的情况下,您需要一个基于unanymous的访问决策选民,使用AuthenticatedVoter检查用户是否已登录,并使用自定义DBPermissionsVoter来确定用户是否具有基于权限的权限关于参考数据。
选民是春天的豆子,所以你可以注入你需要的任何DAO或服务。