通知公告区分首页和管理查询范围、操作权限问题修复

This commit is contained in:
gaoqr
2025-08-07 12:03:25 +08:00
parent c93c4d7b49
commit 9cb7be0fc9
4 changed files with 33 additions and 19 deletions
@@ -72,9 +72,7 @@ public class NoticeController {
@GetMapping("/homepage")
@Operation(summary = "获取首页通知公告列表")
public CommonResult<PageResult<NoticeRespVO>> getHomePageNoticePage(@Validated NoticePageReqVO pageReqVO) {
// 首页只看生效的公告
pageReqVO.setStatus(CommonStatusEnum.ENABLE.getStatus());
PageResult<NoticeDO> pageResult = noticeService.getNoticePage(pageReqVO);
PageResult<NoticeDO> pageResult = noticeService.getHomePageNoticePage(pageReqVO);
return success(BeanUtils.toBean(pageResult, NoticeRespVO.class));
}
@@ -1,9 +1,11 @@
package com.cf.imes.module.system.dal.mysql.notice;
import com.cf.imes.framework.common.enums.CommonStatusEnum;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.organ.core.context.OrganContextHolder;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.system.controller.admin.notice.vo.NoticePageReqVO;
import com.cf.imes.module.system.dal.dataobject.notice.NoticeDO;
import com.cf.imes.module.system.enums.notice.NoticeSourceEnum;
@@ -12,13 +14,13 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface NoticeMapper extends BaseMapperX<NoticeDO> {
default PageResult<NoticeDO> selectPage(NoticePageReqVO reqVO) {
if (NoticeSourceEnum.SYSTEM.getSource().equals(reqVO.getSource())) {
default PageResult<NoticeDO> selectHomePageNoticePage(NoticePageReqVO reqVO) {
if (SecurityFrameworkUtils.isSuperAdmin()) {
// 超管只看内置的
return selectPage(reqVO, new LambdaQueryWrapperX<NoticeDO>()
.likeIfPresent(NoticeDO::getTitle, reqVO.getTitle())
.eqIfPresent(NoticeDO::getStatus, reqVO.getStatus())
.eqIfPresent(NoticeDO::getSource, NoticeSourceEnum.SYSTEM)
.eq(NoticeDO::getSource, NoticeSourceEnum.SYSTEM)
.eq(NoticeDO::getStatus, CommonStatusEnum.ENABLE.getStatus())
.orderByDesc(NoticeDO::getId));
}
// 普通用户查机构下的和内置的
@@ -29,7 +31,8 @@ public interface NoticeMapper extends BaseMapperX<NoticeDO> {
.eq(NoticeDO::getOrganId, OrganContextHolder.getOrganId())
.eq(NoticeDO::getSource, NoticeSourceEnum.CUSTOM))
.or(wrapper -> wrapper.eq(NoticeDO::getSource, NoticeSourceEnum.SYSTEM)))
.orderByDesc(NoticeDO::getId));
.orderByDesc(NoticeDO::getId)
.eq(NoticeDO::getStatus, CommonStatusEnum.ENABLE.getStatus()));
}
}
@@ -40,6 +40,14 @@ public interface NoticeService {
*/
PageResult<NoticeDO> getNoticePage(NoticePageReqVO reqVO);
/**
* 获取首页工作台-通知公告分页列表
*
* @param reqVO
* @return
*/
PageResult<NoticeDO> getHomePageNoticePage(NoticePageReqVO reqVO);
/**
* 获得通知公告
*
@@ -59,8 +59,6 @@ public class NoticeServiceImpl implements NoticeService {
getSelf().validateNameExists(updateReqVO);
// 更新通知公告
NoticeDO updateObj = BeanUtils.toBean(updateReqVO, NoticeDO.class);
// 超管创建的都是内置公告
modifySource(updateObj);
noticeMapper.updateById(updateObj);
}
@@ -73,14 +71,17 @@ public class NoticeServiceImpl implements NoticeService {
}
@Override
@OrganIgnore
public PageResult<NoticeDO> getNoticePage(NoticePageReqVO reqVO) {
boolean isSuperAdmin = SecurityFrameworkUtils.isSuperAdmin();
// 超管查看内置公告
if (isSuperAdmin) {
reqVO.setSource(NoticeSourceEnum.SYSTEM.getSource());
}
return noticeMapper.selectPage(reqVO);
return noticeMapper.selectPage(reqVO, new LambdaQueryWrapperX<NoticeDO>()
.likeIfPresent(NoticeDO::getTitle, reqVO.getTitle())
.eqIfPresent(NoticeDO::getStatus, reqVO.getStatus())
.orderByDesc(NoticeDO::getId));
}
@Override
@OrganIgnore
public PageResult<NoticeDO> getHomePageNoticePage(NoticePageReqVO reqVO) {
return noticeMapper.selectHomePageNoticePage(reqVO);
}
@Override
@@ -97,11 +98,15 @@ public class NoticeServiceImpl implements NoticeService {
if (notice == null) {
throw ServiceExceptionUtil.exception(ErrorCodeConstants.NOTICE_NOT_FOUND);
}
if (!NoticeSourceEnum.SYSTEM.equals(notice.getSource()) && !notice.getOrganId().equals(OrganContextHolder.getOrganId())) {
boolean superAdmin = SecurityFrameworkUtils.isSuperAdmin();
// 公告和操作人非统一组织,只有超管可以编辑和删除
if (NoticeSourceEnum.CUSTOM.equals(notice.getSource())
&& !notice.getOrganId().equals(OrganContextHolder.getOrganId())
&& !superAdmin) {
throw ServiceExceptionUtil.exception(ErrorCodeConstants.NOTICE_NOT_FOUND);
}
// 只有超管可以操作内置公告
if (NoticeSourceEnum.SYSTEM.equals(notice.getSource()) && !SecurityFrameworkUtils.isSuperAdmin()) {
if (NoticeSourceEnum.SYSTEM.equals(notice.getSource()) && !superAdmin) {
throw ServiceExceptionUtil.exception(ErrorCodeConstants.NOTICE_BUILDIN_MODIFY_PERMISSION_ERROR);
}
}