|
@@ -628,7 +628,7 @@ private FamilyInvitationService familyInvitationService;
|
|
|
if (user == null) {
|
|
if (user == null) {
|
|
|
return new ArrayList<>();
|
|
return new ArrayList<>();
|
|
|
}
|
|
}
|
|
|
- return parseRoles(user.getRoles());
|
|
|
|
|
|
|
+ return user.getRoles() != null ? user.getRoles() : new ArrayList<>();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -652,16 +652,14 @@ private FamilyInvitationService familyInvitationService;
|
|
|
}
|
|
}
|
|
|
// 如果用户还没有roles字段,设置默认值
|
|
// 如果用户还没有roles字段,设置默认值
|
|
|
if (user.getRoles() == null || user.getRoles().isEmpty()) {
|
|
if (user.getRoles() == null || user.getRoles().isEmpty()) {
|
|
|
- user.setRoles(user.getRole()); // 当前角色作为第一个角色
|
|
|
|
|
|
|
+ user.setRoles(java.util.Collections.singletonList(user.getRole()));
|
|
|
}
|
|
}
|
|
|
// 检查是否已拥有该角色
|
|
// 检查是否已拥有该角色
|
|
|
if (hasRole(user, newRole)) {
|
|
if (hasRole(user, newRole)) {
|
|
|
return true; // 已有该角色
|
|
return true; // 已有该角色
|
|
|
}
|
|
}
|
|
|
// 添加新角色
|
|
// 添加新角色
|
|
|
- List<String> roleList = parseRoles(user.getRoles());
|
|
|
|
|
- roleList.add(newRole);
|
|
|
|
|
- user.setRoles(joinRoles(roleList));
|
|
|
|
|
|
|
+ user.getRoles().add(newRole);
|
|
|
user.setUpdatedAt(new Date());
|
|
user.setUpdatedAt(new Date());
|
|
|
userMapper.updateById(user);
|
|
userMapper.updateById(user);
|
|
|
return true;
|
|
return true;
|
|
@@ -671,47 +669,13 @@ private FamilyInvitationService familyInvitationService;
|
|
|
* 检查用户是否拥有指定角色 (内部方法)
|
|
* 检查用户是否拥有指定角色 (内部方法)
|
|
|
*/
|
|
*/
|
|
|
private boolean hasRole(User user, String role) {
|
|
private boolean hasRole(User user, String role) {
|
|
|
- List<String> roles = parseRoles(user.getRoles());
|
|
|
|
|
|
|
+ List<String> roles = user.getRoles();
|
|
|
return roles.contains(role);
|
|
return roles.contains(role);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
- * 解析角色字符串为列表
|
|
|
|
|
- */
|
|
|
|
|
- public List<String> parseRoles(String rolesStr) {
|
|
|
|
|
- List<String> result = new ArrayList<>();
|
|
|
|
|
- if (rolesStr == null || rolesStr.isEmpty()) {
|
|
|
|
|
- return result;
|
|
|
|
|
- }
|
|
|
|
|
- // 支持JSON数组格式或逗号分隔格式
|
|
|
|
|
- if (rolesStr.startsWith("[")) {
|
|
|
|
|
- // JSON格式解析
|
|
|
|
|
- rolesStr = rolesStr.replace("[", "").replace("]", "")
|
|
|
|
|
- .replace("\"", "").replace(" ", "");
|
|
|
|
|
- String[] arr = rolesStr.split(",");
|
|
|
|
|
- for (String r : arr) {
|
|
|
|
|
- if (!r.isEmpty()) {
|
|
|
|
|
- result.add(r.trim());
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- // 逗号分隔格式
|
|
|
|
|
- String[] arr = rolesStr.split(",");
|
|
|
|
|
- for (String r : arr) {
|
|
|
|
|
- if (!r.trim().isEmpty()) {
|
|
|
|
|
- result.add(r.trim());
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- return result;
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
- * 将角色列表转换为字符串
|
|
|
|
|
- */
|
|
|
|
|
- private String joinRoles(List<String> roles) {
|
|
|
|
|
- return String.join(",", roles);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 检查角色是否有效
|
|
* 检查角色是否有效
|