Sfoglia il codice sorgente

fix(family): 恢复updateMember丢失的generationLevel/peerType透传,修正管理员权限判断

- FamilyMembersController.updateMember手动复制字段时补回generationLevel/peerType
- FamilyMemberService.updateMember修正权限判断:管理员可编辑所有成员(含关联账号),普通用户仅可编辑不可登录成员
Sisyphus 6 giorni fa
parent
commit
e1903d115f

+ 2 - 0
cfc-backend/src/main/java/com/etotem/cfc/controller/family/FamilyMembersController.java

@@ -173,6 +173,8 @@ public Result<FamilyMemberVO> updateMember(@RequestBody Map<String, Object> body
  if (body.get("avatar") != null) dto.setAvatar(body.get("avatar").toString());
  if (body.get("gender") != null) dto.setGender(body.get("gender").toString());
  if (body.get("birthday") != null) dto.setBirthday(body.get("birthday").toString());
+ if (body.get("generationLevel") != null) dto.setGenerationLevel(body.get("generationLevel").toString());
+ if (body.get("peerType") != null) dto.setPeerType(body.get("peerType").toString());
 
  try {
    FamilyMemberVO vo = familyMemberService.updateMember(userId, memberId, dto);

+ 17 - 7
cfc-backend/src/main/java/com/etotem/cfc/service/FamilyMemberService.java

@@ -770,7 +770,7 @@ public class FamilyMemberService {
     }
 
     /**
-     * 更新成员信息
+     * 更新成员信息:管理员可编辑所有成员(含关联账号的),普通用户仅可编辑不可登录成员
      */
     @Transactional(rollbackFor = Exception.class)
     public FamilyMemberVO updateMember(Long userId, Long memberId, AddFamilyMemberDTO dto) {
@@ -778,19 +778,22 @@ public class FamilyMemberService {
         if (user == null || user.getFamilyId() == null) {
             throw new RuntimeException("用户未加入家庭");
         }
-
         FamilyMember member = familyMemberMapper.selectById(memberId);
         if (member == null || !member.getFamilyId().equals(user.getFamilyId())) {
             throw new RuntimeException("成员不存在或不属于您的家庭");
         }
 
-        // 检查编辑权限
-        if (!isEditable(memberId)) {
+        // 检查编辑权限:管理员可编辑所有成员;普通用户只能编辑无关联账号的成员
+        boolean isAdmin = false;
+        Family family = familyMapper.selectById(user.getFamilyId());
+        if (family != null && Long.valueOf(userId).equals(family.getCreatorId())) {
+            isAdmin = true;
+        }
+        if (!isAdmin && !isEditable(memberId)) {
             throw new RuntimeException("该成员关联了登录账号,不可编辑");
         }
 
         String oldNickname = member.getNickname();
-
         if (dto.getNickname() != null && !dto.getNickname().trim().isEmpty()) {
             member.setNickname(dto.getNickname().trim());
         }
@@ -811,11 +814,18 @@ public class FamilyMemberService {
                 throw new IllegalArgumentException("出生日期格式错误,应为yyyy-MM-dd");
             }
         }
-
+        // 管理员可更新辈分关系
+        if (isAdmin && dto.getGenerationLevel() != null && !dto.getGenerationLevel().trim().isEmpty()) {
+            GenerationLevel genLevel = GenerationLevel.fromValue(dto.getGenerationLevel());
+            if (genLevel != null) {
+                member.setGeneration(genLevel.getOffset());
+                boolean isSpouse = genLevel == GenerationLevel.PEER && "spouse".equals(dto.getPeerType());
+                member.setIsSpouse(isSpouse);
+            }
+        }
         member.setUpdatedAt(new Date());
         familyMemberMapper.updateById(member);
         logMemberAction(member.getFamilyId(), member.getId(), "update", oldNickname, member.getNickname(), userId);
-
         return toFamilyMemberVO(member);
     }