gpt4 book ai didi

spring - 在 Spring Security 中实现每组授权的最佳方式

转载 作者:行者123 更新时间:2023-12-05 05:01:53 25 4
gpt4 key购买 nike

我正在尝试找到最佳方法来根据用户在组中的角色授权他们执行某些操作。
例如,Peter 在 A 组中具有管理员角色,因此他可以踢 A 组中的成员,在 B 组中具有成员角色,因此他只能读取 B 组中的内容。
this is what model of user group relationship looks like .
有没有比在 UserDetails 中加载组角色更好的方法来实现授权,如下所示:

(for (GroupUser groupuser: user.getGroupUsers()) {
authorities.add(new SimpleGrantedAuthority('Group_'+groupuser.getId().getGroupId()+'_'+groupuser.getRole()));}

最佳答案

这是 ABAC权限模型,其安全决策不仅由用户的信息决定,而且还由 protected 资源的状态/属性决定。

在 spring security 方面,最好使用 @PreAuthorize/@PostAuthorize/@PostFilter 实现,它允许您使用 SpEL表达式以声明方式定义安全逻辑,它是一个最终计算结果为 true/false 的表达式。在 SpEL 中,您可以访问执行要应用安全性的用例的方法的输入参数和返回对象,甚至可以引用 spring bean 来调用其方法来进行评估。

例如,你可以这样做:

@PreAuthorize("@authzService.isAllowToKickMember(principal , #userToKick)")
public void kickMemeber(User userToKick){

}


@Service
public class AuthzService{

public boolean isAllowToKickMember(User currentUser , User userToKick){
//check if current user can kick a given user
}
}

有关指针,请查看 this .

关于spring - 在 Spring Security 中实现每组授权的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62492003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com