【发布时间】:2019-09-17 07:32:19
【问题描述】:
我正在研究 Spring Security。我有一个从另一个方法调用的方法。被调用的方法应该返回一个包含多个元素的列表,但我总是发现它只返回列表中的一个元素。
一个例子是这样的:我有 权限:CREATE_EDITOR、EDIT_EDITOR、CREATE_PROFILE、EDIT_PROFILE。
角色:ROLE_EDITOR、ROLE_PROFILE
权限是最先创建的,在创建ROLES时,会遍历PERMISSIONS,只返回与ROLE匹配的PERMISSIONS。
就像在保存角色之前循环只运行一次。如何让它保存与角色匹配的所有权限?
返回权限的方法
private List<Permission> myPermissions(Role role ){
List<Permission> permissionArrayList = new ArrayList<Permission>();
permissionArrayList = permissionRepository.findAll();
String myRole = role.getName().split("_")[1];
for (Permission permission: permissionArrayList) {
if ( permission.getName().contains(myRole) ) {
permissionArrayList.clear();
permissionArrayList.add(permission);
return permissionArrayList;
}
}
throw new InternalServerException();
}
保存ROLE的方法
public Role save(Role role) {
Role myRole = new Role();
myRole.setName(role.getName());
myRole.setPermissions(myPermissions(role));
roleRepository.save(myRole);
return myRole;
}
【问题讨论】:
-
当然它只会包含一个,您在添加新元素之前会删除所有内容。你觉得
.clear收藏点怎么样? -
@M.迪南。谢谢。我试图清除它之前保存的整个实体,忘记了它会清除最后插入的元素。
-
它不会清除最后插入的元素,它会清除整个列表,无论其中有什么。
-
如果我没有清除列表,它会将所有权限添加到新创建的角色,无论它是否匹配。
标签: list spring-boot arraylist spring-security permissions