Просмотр исходного кода

merge: 同步远端 cfclub(权限判定修复与版本自增)

zxyj-web 2 недель назад
Родитель
Сommit
ef8d9d66c9

+ 36 - 2
cfc-backend/src/main/java/com/etotem/cfc/service/ReportMemberPermissionService.java

@@ -1,10 +1,14 @@
 package com.etotem.cfc.service;
 package com.etotem.cfc.service;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.etotem.cfc.entity.Family;
 import com.etotem.cfc.entity.FamilyMember;
 import com.etotem.cfc.entity.FamilyMember;
 import com.etotem.cfc.entity.ReportMemberPermission;
 import com.etotem.cfc.entity.ReportMemberPermission;
+import com.etotem.cfc.entity.User;
+import com.etotem.cfc.mapper.FamilyMapper;
 import com.etotem.cfc.mapper.FamilyMemberMapper;
 import com.etotem.cfc.mapper.FamilyMemberMapper;
 import com.etotem.cfc.mapper.ReportMemberPermissionMapper;
 import com.etotem.cfc.mapper.ReportMemberPermissionMapper;
+import com.etotem.cfc.mapper.UserMapper;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
@@ -16,7 +20,7 @@ import java.util.*;
  * 报告成员级查看权限服务
  * 报告成员级查看权限服务
  *
  *
  * 模型:
  * 模型:
- *  - 家庭管理员(family_members.is_admin=1):可见家庭内全部成员的报告
+ *  - 家庭管理员(家庭创建者 / users.is_family_admin=1 / family_members.is_admin=1):可见家庭内全部成员的报告
  *  - 普通成员:仅可见自己的报告;管理员可通过 report_member_permissions 授权某用户查看某成员的全部报告
  *  - 普通成员:仅可见自己的报告;管理员可通过 report_member_permissions 授权某用户查看某成员的全部报告
  *  - 授权按「成员」粒度:授权后该用户可查看该成员的所有报告(健康报告 + DAN 测评报告),含未来新报告
  *  - 授权按「成员」粒度:授权后该用户可查看该成员的所有报告(健康报告 + DAN 测评报告),含未来新报告
  */
  */
@@ -31,16 +35,46 @@ public class ReportMemberPermissionService {
     @Resource
     @Resource
     private FamilyMemberMapper familyMemberMapper;
     private FamilyMemberMapper familyMemberMapper;
 
 
+    @Resource
+    private FamilyMapper familyMapper;
+
+    @Resource
+    private UserMapper userMapper;
+
     /* ============ 管理员判定 ============ */
     /* ============ 管理员判定 ============ */
 
 
     /**
     /**
-     * 判断用户是否为某家庭的管理员(family_members.is_admin=1)
+     * 判断用户是否为某家庭的管理员。
+     * <p>
+     * 三个等价来源(任一命中即为管理员):
+     * <ol>
+     *  <li><b>家庭创建者</b>:{@code families.creator_id = userId}。
+     *      家长账号按系统设计只存在于 {@code users} 表(family_id + role=parent),
+     *      <b>没有 {@code family_members} 行</b>(见 FamilyMemberService#updateParentMember),
+     *      因此不能只查 family_members.is_admin,否则家庭创建者会被误判为普通成员:
+     *      报告列表坍缩为空、报告详情返回「无权查看」(生产故障 2026-10-23,林小朋 userId=55)。
+     *  <li><b>users.is_family_admin=1</b> 且属于该家庭:兼容管理员转让等场景。</li>
+     *  <li><b>family_members.is_admin=1</b>:家庭成员记录被设为管理员。</li>
+     * </ol>
+     * 与 {@code FamilyMemberService#isFamilyAdminOperator} 判定口径保持一致。
      */
      */
     public boolean isFamilyAdmin(Long userId, Long familyId) {
     public boolean isFamilyAdmin(Long userId, Long familyId) {
         if (userId == null || familyId == null) {
         if (userId == null || familyId == null) {
             return false;
             return false;
         }
         }
         try {
         try {
+            // 1) 家庭创建者(家长账号按设计无 family_members 行,必须认这条)
+            Family family = familyMapper.selectById(familyId);
+            if (family != null && Long.valueOf(userId).equals(family.getCreatorId())) {
+                return true;
+            }
+            // 2) users.is_family_admin=1 且属于该家庭(兼容管理员转让)
+            User user = userMapper.selectById(userId);
+            if (user != null && Boolean.TRUE.equals(user.getIsFamilyAdmin())
+                    && familyId.equals(user.getFamilyId())) {
+                return true;
+            }
+            // 3) family_members.is_admin=1
             Long count = familyMemberMapper.selectCount(
             Long count = familyMemberMapper.selectCount(
                     new LambdaQueryWrapper<FamilyMember>()
                     new LambdaQueryWrapper<FamilyMember>()
                             .eq(FamilyMember::getFamilyId, familyId)
                             .eq(FamilyMember::getFamilyId, familyId)

+ 1 - 1
cfc-web/.last_build_commit

@@ -1 +1 @@
-74da6601f1e9ab70d71cb58c85311fa4f9e182c0
+c760c15e973c1f45fd8c875561a8a8c2d62c4aa2

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

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

+ 1 - 1
cfc-web/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "cfc-web",
   "name": "cfc-web",
-  "version": "1.0.1780",
+  "version": "1.0.1783",
   "private": true,
   "private": true,
   "scripts": {
   "scripts": {
     "dev": "vue-cli-service serve",
     "dev": "vue-cli-service serve",

+ 18 - 0
cfc-web/public/CHANGELOG-v1.0.md

@@ -4,6 +4,24 @@
 
 
 ---
 ---
 
 
+## v1.0.1782 (2026-10-23)
+
+### Bug 修复
+- 报告成员权限管理员判定兼容家庭创建者与 users.is_family_admin
+
+
+## v1.0.1781 (2026-10-23)
+
+### Bug 修复
+- 修复打卡页 @select 原生事件失效(餐次选择/图片语音上传无响应)
+
+### 其他
+- - diet-checkin/exercise-checkin/diet-index/exercise-index 原生 view/text 的 @select->@click(提交、拍照、录音、删除、返回等)
+- - 修正模板 getItemKey->getPhotoKey 与 methods 不一致
+- - article-detail 听文章按钮移至右下角(本会话UI调整)
+- 
+
+
 ## v1.0.1780 (2026-10-23)
 ## v1.0.1780 (2026-10-23)
 
 
 ### 样式
 ### 样式

+ 19 - 1
cfc-web/public/CHANGELOG.md

@@ -1,6 +1,6 @@
 # 更新日志
 # 更新日志
 
 
-> 当前版本: v1.0.1780
+> 当前版本: v1.0.1782
 
 
 ## 历史版本
 ## 历史版本
 
 
@@ -8,6 +8,24 @@
 
 
 ---
 ---
 
 
+## v1.0.1782 (2026-10-23)
+
+### Bug 修复
+- 报告成员权限管理员判定兼容家庭创建者与 users.is_family_admin
+
+
+## v1.0.1781 (2026-10-23)
+
+### Bug 修复
+- 修复打卡页 @select 原生事件失效(餐次选择/图片语音上传无响应)
+
+### 其他
+- - diet-checkin/exercise-checkin/diet-index/exercise-index 原生 view/text 的 @select->@click(提交、拍照、录音、删除、返回等)
+- - 修正模板 getItemKey->getPhotoKey 与 methods 不一致
+- - article-detail 听文章按钮移至右下角(本会话UI调整)
+- 
+
+
 ## v1.0.1780 (2026-10-23)
 ## v1.0.1780 (2026-10-23)
 
 
 ### 样式
 ### 样式