liu
2 天以前 a2371d570725163f3ad9ecee8725f16c839b1e2a
fix(ums): 资料变更列表按提交人过滤,查看全部需审核权限

- 新增 ums:member:change:audit 权限判断,无权限者仅能查看本人提交记录
- 无登录态时返回空页,避免条件为空退化为查询全部
- Mapper 方法改名为 selectPageBySubmitter,避免与 BaseMapperX 重载二义

Co-Authored-By: Claude <noreply@anthropic.com>
已修改2个文件
37 ■■■■■ 文件已修改
yudao-module-ums/src/main/java/cn/iocoder/yudao/module/ums/dal/mysql/member/UmsMemberProfileChangeMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-ums/src/main/java/cn/iocoder/yudao/module/ums/service/member/UmsMemberProfileChangeServiceImpl.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-ums/src/main/java/cn/iocoder/yudao/module/ums/dal/mysql/member/UmsMemberProfileChangeMapper.java
@@ -27,11 +27,22 @@
        return list.isEmpty() ? null : list.get(0);
    }
    default PageResult<UmsMemberProfileChangeDO> selectPage(UmsMemberProfileChangePageReqVO reqVO) {
    /**
     * 分页查询资料变更申请
     *
     * <p>方法名不用 selectPage 重载,避免与 BaseMapperX.selectPage(PageParam, Wrapper) 在传 null 时二义。
     *
     * @param reqVO            查询条件
     * @param submitterUserId  提交人用户编号;非空时只查该用户提交的记录(会员自助场景),
     *                         为空表示不限制提交人(管理员审核场景)
     */
    default PageResult<UmsMemberProfileChangeDO> selectPageBySubmitter(UmsMemberProfileChangePageReqVO reqVO,
                                                                      Long submitterUserId) {
        return selectPage(reqVO, new LambdaQueryWrapperX<UmsMemberProfileChangeDO>()
                .likeIfPresent(UmsMemberProfileChangeDO::getMemberNo, reqVO.getMemberNo())
                .likeIfPresent(UmsMemberProfileChangeDO::getMemberName, reqVO.getMemberName())
                .eqIfPresent(UmsMemberProfileChangeDO::getStatus, reqVO.getStatus())
                .eqIfPresent(UmsMemberProfileChangeDO::getUserId, submitterUserId)
                .orderByDesc(UmsMemberProfileChangeDO::getId));
    }
yudao-module-ums/src/main/java/cn/iocoder/yudao/module/ums/service/member/UmsMemberProfileChangeServiceImpl.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
import cn.iocoder.yudao.module.ums.controller.admin.member.vo.profile.UmsMemberProfileChangePageReqVO;
import cn.iocoder.yudao.module.ums.controller.admin.member.vo.profile.UmsMemberProfileChangeSaveReqVO;
import cn.iocoder.yudao.module.ums.dal.dataobject.member.UmsMemberDO;
@@ -35,11 +36,17 @@
    private static final int SUMMARY_MAX_LENGTH = 1000;
    /** 资料变更审核权限:拥有该权限(或为超级管理员)即可查看全部申请 */
    private static final String PERMISSION_CHANGE_AUDIT = "ums:member:change:audit";
    @Resource
    private UmsMemberMapper memberMapper;
    @Resource
    private UmsMemberProfileChangeMapper changeMapper;
    @Resource
    private PermissionApi permissionApi;
    @Override
    public UmsMemberDO getMyProfile() {
@@ -75,7 +82,22 @@
    @Override
    public PageResult<UmsMemberProfileChangeDO> getChangePage(UmsMemberProfileChangePageReqVO reqVO) {
        return changeMapper.selectPage(reqVO);
        Long loginUserId = getLoginUserId();
        // 无登录态时返回空,避免提交人条件为空导致退化成查全部
        if (loginUserId == null) {
            return PageResult.empty();
        }
        // 有审核权限(含超级管理员)可查看全部申请;其余人只能看到自己提交的记录,
        // 否则普通会员凭 ums:member:change:query 就能翻到其他会员的联系方式等资料。
        if (canViewAllChanges(loginUserId)) {
            return changeMapper.selectPageBySubmitter(reqVO, null);
        }
        return changeMapper.selectPageBySubmitter(reqVO, loginUserId);
    }
    /** 是否有查看全部资料变更申请的权限:审核权限或超级管理员(hasAnyPermissions 内含超管兜底) */
    private boolean canViewAllChanges(Long userId) {
        return permissionApi.hasAnyPermissions(userId, PERMISSION_CHANGE_AUDIT);
    }
    @Override