如何对子 属性 中包含的 ID 执行复杂的 @PreAuthorize 检查?
How to do a complicated @PreAuthorize check for an ID that is contained in child property?
根据这个很棒post
表明您可以使用以下方法将 URL ID 与用户 ID 匹配:
@PreAuthorize("hasRole('ROLE_ADMIN) or #authUser.id == #userId")
但是如果我需要检查 userId 是否与 authUser 的子项相匹配怎么办?
所以假设我有实体:
public class User {
int id;
@OneToMany(mappedBy = "owner")
Set<Store> stores;
}
我想根据#userId == #authUser.ANY_ONE_OF_THE_STORES.id?
进行验证
您可以创建组件,例如
@Component
public class AuthComponent {
public boolean hasPermission(User user, Long id) {
// do whatever checks you want here
return someResult;
}
}
然后就可以像这样访问SPEL中的组件方法了
@PreAuthorize("@authComponent.hasPermission(#authUser, #userId)")
因为 SPEL 支持通过 @ 引用 bean docs
根据这个很棒post
表明您可以使用以下方法将 URL ID 与用户 ID 匹配:
@PreAuthorize("hasRole('ROLE_ADMIN) or #authUser.id == #userId")
但是如果我需要检查 userId 是否与 authUser 的子项相匹配怎么办?
所以假设我有实体:
public class User {
int id;
@OneToMany(mappedBy = "owner")
Set<Store> stores;
}
我想根据#userId == #authUser.ANY_ONE_OF_THE_STORES.id?
进行验证您可以创建组件,例如
@Component
public class AuthComponent {
public boolean hasPermission(User user, Long id) {
// do whatever checks you want here
return someResult;
}
}
然后就可以像这样访问SPEL中的组件方法了
@PreAuthorize("@authComponent.hasPermission(#authUser, #userId)")
因为 SPEL 支持通过 @ 引用 bean docs