Merge remote-tracking branch 'base-version/test' into dev
This commit is contained in:
@@ -103,4 +103,8 @@
|
||||
</root>
|
||||
</springProfile>
|
||||
|
||||
<!-- <logger name="com.zt.plat.module.system.dal" level="DEBUG" additivity="false">-->
|
||||
<!-- <appender-ref ref="STDOUT"/>-->
|
||||
<!-- </logger>-->
|
||||
|
||||
</configuration>
|
||||
|
||||
@@ -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.dal.dataobject.permission.MenuDO;
|
||||
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.enums.logger.LoginLogTypeEnum;
|
||||
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 java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import static com.zt.plat.framework.common.pojo.CommonResult.success;
|
||||
@@ -126,7 +129,18 @@ public class AuthController {
|
||||
// 1.3 获得菜单列表
|
||||
Set<Long> menuIds = permissionService.getRoleMenuListByRoleId(convertSet(roles, RoleDO::getId));
|
||||
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);
|
||||
for (MenuDO menu : menuList) {
|
||||
RoleMenuDO roleMenu = roleMenuMap.get(menu.getId());
|
||||
if (roleMenu != null && roleMenu.getShowMenu() != null && !roleMenu.getShowMenu()) {
|
||||
menu.setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 拼接结果返回
|
||||
return success(AuthConvert.INSTANCE.convert(user, roles, menuList));
|
||||
|
||||
@@ -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.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.PermissionAssignRoleMenuItemReqVO;
|
||||
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.PermissionUserSupervisionRespVO;
|
||||
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.RoleMenuDO;
|
||||
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.service.permission.MenuService;
|
||||
@@ -57,8 +59,16 @@ public class PermissionController {
|
||||
@Parameter(name = "roleId", description = "角色编号", required = true)
|
||||
@GetMapping("/list-role-menus")
|
||||
@PreAuthorize("@ss.hasPermission('system:permission:assign-role-menu')")
|
||||
public CommonResult<Set<Long>> getRoleMenuList(Long roleId) {
|
||||
return success(permissionService.getRoleMenuListByRoleId(roleId));
|
||||
public CommonResult<Set<PermissionAssignRoleMenuItemReqVO>> getRoleMenuList(Long 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")
|
||||
@@ -66,10 +76,13 @@ public class PermissionController {
|
||||
@PreAuthorize("@ss.hasPermission('system:permission:assign-role-menu')")
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -15,7 +15,7 @@ public class PermissionAssignRoleMenuReqVO {
|
||||
@NotNull(message = "角色编号不能为空")
|
||||
private Long roleId;
|
||||
|
||||
@Schema(description = "菜单编号列表", example = "1,3,5")
|
||||
private Set<Long> menuIds = Collections.emptySet(); // 兜底
|
||||
@Schema(description = "菜单编列表")
|
||||
private Set<PermissionAssignRoleMenuItemReqVO> menus = Collections.emptySet(); // 兜底
|
||||
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ public class UserSaveReqVO {
|
||||
@Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "zt")
|
||||
@NotBlank(message = "用户账号不能为空")
|
||||
@Pattern(regexp = "^[a-zA-Z0-9]+$", message = "用户账号由 数字、字母 组成")
|
||||
@Size(min = 4, max = 30, message = "用户账号长度为 4-30 个字符")
|
||||
@Size(min = 1, max = 30, message = "用户账号长度为 1-30 个字符")
|
||||
@DiffLogField(name = "用户账号")
|
||||
private String username;
|
||||
|
||||
|
||||
@@ -33,4 +33,9 @@ public class RoleMenuDO extends TenantBaseDO {
|
||||
*/
|
||||
private Long menuId;
|
||||
|
||||
/**
|
||||
* 是否显示菜单
|
||||
*/
|
||||
private Boolean showMenu = true;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package com.zt.plat.module.system.service.permission;
|
||||
|
||||
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 java.util.Collection;
|
||||
@@ -153,4 +155,21 @@ public interface PermissionService {
|
||||
*/
|
||||
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);
|
||||
|
||||
}
|
||||
|
||||
@@ -6,6 +6,8 @@ import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.extra.spring.SpringUtil;
|
||||
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.base.Suppliers;
|
||||
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.datapermission.core.annotation.DataPermission;
|
||||
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.RoleDO;
|
||||
import com.zt.plat.module.system.dal.dataobject.permission.RoleMenuDO;
|
||||
@@ -485,4 +488,35 @@ public class PermissionServiceImpl implements PermissionService {
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user