Ver Fonte

chore: auto bump version and changelog [skip ci]

iwt há 1 mês atrás
pai
commit
8cedb255c6

+ 23 - 1
cfc-backend/src/main/java/com/etotem/cfc/controller/family/InteractionLogController.java

@@ -6,6 +6,7 @@ import com.etotem.cfc.dto.AddInteractionDTO;
 import com.etotem.cfc.dto.InteractionLogVO;
 import com.etotem.cfc.entity.User;
 import com.etotem.cfc.mapper.UserMapper;
+import com.etotem.cfc.service.FamilyMemberService;
 import com.etotem.cfc.service.InteractionLogService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -25,6 +26,9 @@ public class InteractionLogController {
     @Resource
     private UserMapper userMapper;
 
+    @Resource
+    private FamilyMemberService familyMemberService;
+
  @Operation(summary = "添加互动记录")
  @PostMapping("/add")
  public Result<InteractionLogVO> addInteraction(@RequestBody AddInteractionDTO dto,
@@ -32,7 +36,6 @@ public class InteractionLogController {
   if (userId == null) {
     return Result.error("请先登录");
   }
-  // familyId 应由后端根据登录用户自动解析(前端无法获取)
   if (dto.getFamilyId() == null) {
     User user = userMapper.selectById(userId);
     if (user == null || user.getFamilyId() == null) {
@@ -40,6 +43,15 @@ public class InteractionLogController {
     }
     dto.setFamilyId(user.getFamilyId());
   }
+  if (!familyMemberService.isCallerInFamily(dto.getFamilyId(), userId)) {
+    return Result.error("无权操作其他家庭");
+  }
+  if (dto.getFromMemberId() != null && !familyMemberService.isCallerInSameFamily(dto.getFromMemberId(), userId)) {
+    return Result.error("无权操作其他家庭成员");
+  }
+  if (dto.getToMemberId() != null && !familyMemberService.isCallerInSameFamily(dto.getToMemberId(), userId)) {
+    return Result.error("无权操作其他家庭成员");
+  }
   try {
    InteractionLogVO vo = interactionLogService.addInteraction(dto);
    return Result.success(vo);
@@ -68,6 +80,16 @@ public Result<Page<InteractionLogVO>> listInteractions(@RequestBody Map<String,
         Integer size = body.get("size") != null
                 ? Integer.valueOf(body.get("size").toString()) : 10;
 
+        if (familyId != null && !familyMemberService.isCallerInFamily(familyId, userId)) {
+          return Result.error("无权查看其他家庭的互动记录");
+        }
+        if (fromMemberId != null && !familyMemberService.isCallerInSameFamily(fromMemberId, userId)) {
+          return Result.error("无权查看其他家庭成员的互动记录");
+        }
+        if (toMemberId != null && !familyMemberService.isCallerInSameFamily(toMemberId, userId)) {
+          return Result.error("无权查看其他家庭成员的互动记录");
+        }
+
         Page<InteractionLogVO> result = interactionLogService.listInteractions(
                 familyId, fromMemberId, toMemberId, page, size);
         return Result.success(result);

+ 19 - 0
cfc-backend/src/main/java/com/etotem/cfc/controller/family/RelationshipQuestionnaireController.java

@@ -5,6 +5,7 @@ import com.etotem.cfc.dto.GenerateQuestionnaireDTO;
 import com.etotem.cfc.dto.QuestionnaireSnapshotVO;
 import com.etotem.cfc.dto.SubmitQuestionnaireDTO;
 import com.etotem.cfc.entity.RelationshipQuestionnaireResponse;
+import com.etotem.cfc.service.FamilyMemberService;
 import com.etotem.cfc.service.RelationshipQuestionnaireService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -22,6 +23,9 @@ public class RelationshipQuestionnaireController {
     @Resource
     private RelationshipQuestionnaireService questionnaireService;
 
+    @Resource
+    private FamilyMemberService familyMemberService;
+
 @Operation(summary = "AI 生成关系问卷")
 @PostMapping("/generate")
 public Result<QuestionnaireSnapshotVO> generateQuestionnaire(@RequestBody GenerateQuestionnaireDTO dto,
@@ -30,6 +34,9 @@ public Result<QuestionnaireSnapshotVO> generateQuestionnaire(@RequestBody Genera
    return Result.error("请先登录");
  }
  dto.setRespondentId(userId);
+ if (dto.getMemberId() != null && !familyMemberService.isCallerInSameFamily(dto.getMemberId(), userId)) {
+   return Result.error("无权操作其他家庭成员");
+ }
  try {
    QuestionnaireSnapshotVO vo = questionnaireService.generateQuestionnaire(dto);
    return Result.success(vo);
@@ -48,6 +55,12 @@ public Result<RelationshipQuestionnaireResponse> submitQuestionnaire(@RequestBod
    return Result.error("请先登录");
  }
  dto.setRespondentId(userId);
+ if (dto.getSnapshotId() != null) {
+    RelationshipQuestionnaireSnapshot snapshot = questionnaireService.getSnapshotById(dto.getSnapshotId());
+   if (snapshot != null && !familyMemberService.isCallerInSameFamily(snapshot.getFamilyMemberId(), userId)) {
+     return Result.error("无权操作其他家庭的问卷");
+   }
+ }
  try {
    RelationshipQuestionnaireResponse resp = questionnaireService.submitQuestionnaire(dto);
    return Result.success(resp);
@@ -65,6 +78,9 @@ public Result<QuestionnaireSnapshotVO> getSnapshot(@PathVariable Long memberId,
  if (userId == null) {
    return Result.error("请先登录");
  }
+ if (!familyMemberService.isCallerInSameFamily(memberId, userId)) {
+   return Result.error("无权查看其他家庭的问卷");
+ }
  try {
    QuestionnaireSnapshotVO vo = questionnaireService.getSnapshot(memberId);
    return Result.success(vo);
@@ -80,6 +96,9 @@ public Result<List<RelationshipQuestionnaireResponse>> getHistory(@PathVariable
  if (userId == null) {
    return Result.error("请先登录");
  }
+ if (!familyMemberService.isCallerInSameFamily(memberId, userId)) {
+   return Result.error("无权查看其他家庭的问卷历史");
+ }
  try {
    List<RelationshipQuestionnaireResponse> history = questionnaireService.getHistory(memberId);
    return Result.success(history);

+ 1 - 0
cfc-backend/src/main/java/com/etotem/cfc/service/MembershipService.java

@@ -8,6 +8,7 @@ import com.etotem.cfc.entity.*;
 import com.etotem.cfc.mapper.*;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;

+ 1 - 1
cfc-web/.last_build_commit

@@ -1 +1 @@
-fdb790188529002b2fc65f7cb1f9bf4c074d410f
+b83d9e4d46e4c9893ae0332a18eb018b697b2582

+ 2 - 2
cfc-web/package-lock.json

@@ -1,12 +1,12 @@
 {
   "name": "cfc-web",
-  "version": "1.0.782",
+  "version": "1.0.783",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "cfc-web",
-      "version": "1.0.782",
+      "version": "1.0.783",
       "dependencies": {
         "@wangeditor/editor": "^5.1.23",
         "@wangeditor/editor-for-vue": "^1.0.2",