Merge branch 'test' into test-dsc

* test:
  取消sql的日志输出
  授权菜单权限可选不展示菜单选项. http://172.16.46.63:31560/index.php?m=task&f=view&taskID=707
  1. 调整 username 同步逻辑 2. 调整 eban 回调登录逻辑
This commit is contained in:
ranke
2026-01-16 16:18:53 +08:00
9 changed files with 121 additions and 6 deletions

View File

@@ -0,0 +1,4 @@
ALTER TABLE "SYSTEM_ROLE_MENU" ADD COLUMN "SHOW_MENU" BIT DEFAULT ('1') NOT NULL;
COMMENT ON COLUMN "SYSTEM_ROLE_MENU"."SHOW_MENU" IS '是否显示菜单';
CREATE INDEX "IDX_SYSTEM_ROLE_ID_AND_MENU_ID" ON "SYSTEM_ROLE_MENU"(ROLE_ID,MENU_ID);

View File

@@ -103,4 +103,8 @@
</root> </root>
</springProfile> </springProfile>
<!-- <logger name="com.zt.plat.module.system.dal" level="DEBUG" additivity="false">-->
<!-- <appender-ref ref="STDOUT"/>-->
<!-- </logger>-->
</configuration> </configuration>

View File

@@ -12,6 +12,7 @@ import com.zt.plat.module.system.controller.admin.auth.vo.*;
import com.zt.plat.module.system.convert.auth.AuthConvert; import com.zt.plat.module.system.convert.auth.AuthConvert;
import com.zt.plat.module.system.dal.dataobject.permission.MenuDO; import com.zt.plat.module.system.dal.dataobject.permission.MenuDO;
import com.zt.plat.module.system.dal.dataobject.permission.RoleDO; import com.zt.plat.module.system.dal.dataobject.permission.RoleDO;
import com.zt.plat.module.system.dal.dataobject.permission.RoleMenuDO;
import com.zt.plat.module.system.dal.dataobject.user.AdminUserDO; import com.zt.plat.module.system.dal.dataobject.user.AdminUserDO;
import com.zt.plat.module.system.enums.logger.LoginLogTypeEnum; import com.zt.plat.module.system.enums.logger.LoginLogTypeEnum;
import com.zt.plat.module.system.service.auth.AdminAuthService; import com.zt.plat.module.system.service.auth.AdminAuthService;
@@ -33,7 +34,9 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
import static com.zt.plat.framework.common.pojo.CommonResult.success; import static com.zt.plat.framework.common.pojo.CommonResult.success;
@@ -126,7 +129,18 @@ public class AuthController {
// 1.3 获得菜单列表 // 1.3 获得菜单列表
Set<Long> menuIds = permissionService.getRoleMenuListByRoleId(convertSet(roles, RoleDO::getId)); Set<Long> menuIds = permissionService.getRoleMenuListByRoleId(convertSet(roles, RoleDO::getId));
List<MenuDO> menuList = menuService.getMenuList(menuIds); List<MenuDO> menuList = menuService.getMenuList(menuIds);
Set<RoleMenuDO> roleMenuList = permissionService.getByRoleIdAndMenuIds(roleIds, menuIds);
Map<Long, RoleMenuDO> roleMenuMap = new HashMap<>(roleMenuList.size());
for (RoleMenuDO roleMenu : roleMenuList) {
roleMenuMap.put(roleMenu.getMenuId(), roleMenu);
}
menuList = menuService.filterDisableMenus(menuList); menuList = menuService.filterDisableMenus(menuList);
for (MenuDO menu : menuList) {
RoleMenuDO roleMenu = roleMenuMap.get(menu.getId());
if (roleMenu != null && roleMenu.getShowMenu() != null && !roleMenu.getShowMenu()) {
menu.setVisible(false);
}
}
// 2. 拼接结果返回 // 2. 拼接结果返回
return success(AuthConvert.INSTANCE.convert(user, roles, menuList)); return success(AuthConvert.INSTANCE.convert(user, roles, menuList));

View File

@@ -6,11 +6,13 @@ import com.zt.plat.framework.common.enums.CommonStatusEnum;
import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.util.collection.CollectionUtils; import com.zt.plat.framework.common.util.collection.CollectionUtils;
import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleDataScopeReqVO; import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleDataScopeReqVO;
import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleMenuItemReqVO;
import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleMenuReqVO; import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleMenuReqVO;
import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignUserRoleReqVO; import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignUserRoleReqVO;
import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionUserSupervisionRespVO; import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionUserSupervisionRespVO;
import com.zt.plat.module.system.dal.dataobject.permission.MenuDO; import com.zt.plat.module.system.dal.dataobject.permission.MenuDO;
import com.zt.plat.module.system.dal.dataobject.permission.RoleDO; import com.zt.plat.module.system.dal.dataobject.permission.RoleDO;
import com.zt.plat.module.system.dal.dataobject.permission.RoleMenuDO;
import com.zt.plat.module.system.dal.dataobject.user.AdminUserDO; import com.zt.plat.module.system.dal.dataobject.user.AdminUserDO;
import com.zt.plat.module.system.enums.permission.MenuTypeEnum; import com.zt.plat.module.system.enums.permission.MenuTypeEnum;
import com.zt.plat.module.system.service.permission.MenuService; import com.zt.plat.module.system.service.permission.MenuService;
@@ -57,8 +59,16 @@ public class PermissionController {
@Parameter(name = "roleId", description = "角色编号", required = true) @Parameter(name = "roleId", description = "角色编号", required = true)
@GetMapping("/list-role-menus") @GetMapping("/list-role-menus")
@PreAuthorize("@ss.hasPermission('system:permission:assign-role-menu')") @PreAuthorize("@ss.hasPermission('system:permission:assign-role-menu')")
public CommonResult<Set<Long>> getRoleMenuList(Long roleId) { public CommonResult<Set<PermissionAssignRoleMenuItemReqVO>> getRoleMenuList(Long roleId) {
return success(permissionService.getRoleMenuListByRoleId(roleId)); Set<Long> menuIds = permissionService.getRoleMenuListByRoleId(roleId);
Set<RoleMenuDO> menuList = permissionService.getByRoleIdAndMenuIds(Collections.singleton(roleId), menuIds);
Set<PermissionAssignRoleMenuItemReqVO> result = menuList.stream().map(menu -> {
PermissionAssignRoleMenuItemReqVO reqVO = new PermissionAssignRoleMenuItemReqVO();
reqVO.setId(menu.getMenuId());
reqVO.setShowMenu(menu.getShowMenu());
return reqVO;
}).collect(Collectors.toSet());
return success(result);
} }
@PostMapping("/assign-role-menu") @PostMapping("/assign-role-menu")
@@ -66,10 +76,13 @@ public class PermissionController {
@PreAuthorize("@ss.hasPermission('system:permission:assign-role-menu')") @PreAuthorize("@ss.hasPermission('system:permission:assign-role-menu')")
public CommonResult<Boolean> assignRoleMenu(@Validated @RequestBody PermissionAssignRoleMenuReqVO reqVO) { public CommonResult<Boolean> assignRoleMenu(@Validated @RequestBody PermissionAssignRoleMenuReqVO reqVO) {
// 开启多租户的情况下,需要过滤掉未开通的菜单 // 开启多租户的情况下,需要过滤掉未开通的菜单
tenantService.handleTenantMenu(menuIds -> reqVO.getMenuIds().removeIf(menuId -> !CollUtil.contains(menuIds, menuId))); tenantService.handleTenantMenu(menuIds -> reqVO.getMenus().removeIf(menu -> !CollUtil.contains(menuIds, menu.getId())));
// 执行菜单的分配 // 执行菜单的分配
permissionService.assignRoleMenu(reqVO.getRoleId(), reqVO.getMenuIds()); permissionService.assignRoleMenu(reqVO.getRoleId(), reqVO.getMenus().stream().map(PermissionAssignRoleMenuItemReqVO::getId).collect(Collectors.toSet()));
// 更新菜单的显示状态
permissionService.updateMenuDisplay(reqVO.getRoleId(), reqVO.getMenus());
return success(true); return success(true);
} }

View File

@@ -0,0 +1,22 @@
package com.zt.plat.module.system.controller.admin.permission.vo.permission;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Schema(description = "管理后台 - 赋予角色菜单--菜单列表 Request VO")
@Data
public class PermissionAssignRoleMenuItemReqVO {
@Schema(description = "菜单ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
@NotNull(message = "菜单ID不能为空")
private Long id;
@Schema(description = "是否显示菜单,默认显示(true)")
private Boolean showMenu = true;
@Schema(description = "是否显示菜单按钮是否点击过(避免大量更新数据,只更新点击过的)")
private Boolean showMenuChanged = false;
}

View File

@@ -15,7 +15,7 @@ public class PermissionAssignRoleMenuReqVO {
@NotNull(message = "角色编号不能为空") @NotNull(message = "角色编号不能为空")
private Long roleId; private Long roleId;
@Schema(description = "菜单编列表", example = "1,3,5") @Schema(description = "菜单编列表")
private Set<Long> menuIds = Collections.emptySet(); // 兜底 private Set<PermissionAssignRoleMenuItemReqVO> menus = Collections.emptySet(); // 兜底
} }

View File

@@ -33,4 +33,9 @@ public class RoleMenuDO extends TenantBaseDO {
*/ */
private Long menuId; private Long menuId;
/**
* 是否显示菜单
*/
private Boolean showMenu = true;
} }

View File

@@ -1,6 +1,8 @@
package com.zt.plat.module.system.service.permission; package com.zt.plat.module.system.service.permission;
import com.zt.plat.framework.common.biz.system.permission.dto.DeptDataPermissionRespDTO; import com.zt.plat.framework.common.biz.system.permission.dto.DeptDataPermissionRespDTO;
import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleMenuItemReqVO;
import com.zt.plat.module.system.dal.dataobject.permission.RoleMenuDO;
import com.zt.plat.module.system.enums.permission.DataScopeEnum; import com.zt.plat.module.system.enums.permission.DataScopeEnum;
import java.util.Collection; import java.util.Collection;
@@ -153,4 +155,21 @@ public interface PermissionService {
*/ */
DataScopeEnum getUserDataPermissionLevel(Long userId); DataScopeEnum getUserDataPermissionLevel(Long userId);
/**
* 更新菜单是否显示
*
* @param roleId 用户编号
* @param menus 包含菜单编号和是否显示的Bean List
* @return
*/
void updateMenuDisplay(Long roleId, Set<PermissionAssignRoleMenuItemReqVO> menus);
/**
* 根据角色ID和菜单IDS批量查询
*
* @param ids
* @return
*/
Set<RoleMenuDO> getByRoleIdAndMenuIds(Set<Long> roleIds, Set<Long> ids);
} }

View File

@@ -6,6 +6,8 @@ import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Suppliers; import com.google.common.base.Suppliers;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
@@ -14,6 +16,7 @@ import com.zt.plat.framework.common.enums.CommonStatusEnum;
import com.zt.plat.framework.common.util.collection.CollectionUtils; import com.zt.plat.framework.common.util.collection.CollectionUtils;
import com.zt.plat.framework.datapermission.core.annotation.DataPermission; import com.zt.plat.framework.datapermission.core.annotation.DataPermission;
import com.zt.plat.framework.tenant.core.context.DeptContextHolder; import com.zt.plat.framework.tenant.core.context.DeptContextHolder;
import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleMenuItemReqVO;
import com.zt.plat.module.system.dal.dataobject.permission.MenuDO; import com.zt.plat.module.system.dal.dataobject.permission.MenuDO;
import com.zt.plat.module.system.dal.dataobject.permission.RoleDO; import com.zt.plat.module.system.dal.dataobject.permission.RoleDO;
import com.zt.plat.module.system.dal.dataobject.permission.RoleMenuDO; import com.zt.plat.module.system.dal.dataobject.permission.RoleMenuDO;
@@ -485,4 +488,35 @@ public class PermissionServiceImpl implements PermissionService {
return SpringUtil.getBean(getClass()); return SpringUtil.getBean(getClass());
} }
/**
* 更新菜单是否显示
*
* @param roleId 用户编号
* @param menus 包含菜单编号和是否显示的Bean List
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void updateMenuDisplay(Long roleId, Set<PermissionAssignRoleMenuItemReqVO> menus) {
for (PermissionAssignRoleMenuItemReqVO menu : menus) {
if (menu.getShowMenuChanged()) {
LambdaUpdateWrapper<RoleMenuDO> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(RoleMenuDO::getRoleId, roleId).eq(RoleMenuDO::getMenuId, menu.getId()).set(RoleMenuDO::getShowMenu, menu.getShowMenu());
roleMenuMapper.update(updateWrapper);
}
}
}
@Override
public Set<RoleMenuDO> getByRoleIdAndMenuIds(Set<Long> roleIds, Set<Long> ids) {
Set<RoleMenuDO> result = new HashSet<>(ids.size());
for (Long roleId : roleIds) {
LambdaQueryWrapper<RoleMenuDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(RoleMenuDO::getRoleId, roleId).in(!ids.isEmpty(),RoleMenuDO::getMenuId, ids);
result.addAll(roleMenuMapper.selectList(queryWrapper));
}
return result;
}
} }