Merge branch 'master-jdk17' of https://gitee.com/zhijiantianya/ruoyi-vue-pro
# Conflicts: # yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmHttpRequestUtils.java # yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java # yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/user/AdminUserApiImpl.java
This commit is contained in:
@@ -24,6 +24,7 @@ public interface ErrorCodeConstants {
|
||||
ErrorCode MENU_NOT_EXISTS = new ErrorCode(1_002_001_003, "菜单不存在");
|
||||
ErrorCode MENU_EXISTS_CHILDREN = new ErrorCode(1_002_001_004, "存在子菜单,无法删除");
|
||||
ErrorCode MENU_PARENT_NOT_DIR_OR_MENU = new ErrorCode(1_002_001_005, "父菜单的类型必须是目录或者菜单");
|
||||
ErrorCode MENU_COMPONENT_NAME_DUPLICATE = new ErrorCode(1_002_001_006, "已经存在该组件名的菜单");
|
||||
|
||||
// ========== 角色模块 1-002-002-000 ==========
|
||||
ErrorCode ROLE_NOT_EXISTS = new ErrorCode(1_002_002_000, "角色不存在");
|
||||
|
@@ -3,15 +3,15 @@ package cn.iocoder.yudao.module.system.api.user;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjUtil;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
|
||||
import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils;
|
||||
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
|
||||
import cn.iocoder.yudao.module.system.service.dept.DeptService;
|
||||
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -59,10 +59,11 @@ public class AdminUserApiImpl implements AdminUserApi {
|
||||
}
|
||||
|
||||
@Override
|
||||
@DataPermission(enable = false) // 禁用数据权限。原因是,一般基于指定 id 的 API 查询,都是数据拼接为主
|
||||
public List<AdminUserRespDTO> getUserList(Collection<Long> ids) {
|
||||
List<AdminUserDO> users = userService.getUserList(ids);
|
||||
return BeanUtils.toBean(users, AdminUserRespDTO.class);
|
||||
return DataPermissionUtils.executeIgnore(() -> { // 禁用数据权限。原因是,一般基于指定 id 的 API 查询,都是数据拼接为主
|
||||
List<AdminUserDO> users = userService.getUserList(ids);
|
||||
return BeanUtils.toBean(users, AdminUserRespDTO.class);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -28,4 +28,9 @@ public interface MenuMapper extends BaseMapperX<MenuDO> {
|
||||
default List<MenuDO> selectListByPermission(String permission) {
|
||||
return selectList(MenuDO::getPermission, permission);
|
||||
}
|
||||
|
||||
default MenuDO selectByComponentName(String componentName) {
|
||||
return selectOne(MenuDO::getComponentName, componentName);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -5,23 +5,20 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.socail.vo.user.SocialUserPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.social.SocialUserDO;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface SocialUserMapper extends BaseMapperX<SocialUserDO> {
|
||||
|
||||
default SocialUserDO selectByTypeAndCodeAnState(Integer type, String code, String state) {
|
||||
return selectOne(new LambdaQueryWrapper<SocialUserDO>()
|
||||
.eq(SocialUserDO::getType, type)
|
||||
.eq(SocialUserDO::getCode, code)
|
||||
.eq(SocialUserDO::getState, state));
|
||||
return selectOne(SocialUserDO::getType, type,
|
||||
SocialUserDO::getCode, code,
|
||||
SocialUserDO::getState, state);
|
||||
}
|
||||
|
||||
default SocialUserDO selectByTypeAndOpenid(Integer type, String openid) {
|
||||
return selectOne(new LambdaQueryWrapper<SocialUserDO>()
|
||||
.eq(SocialUserDO::getType, type)
|
||||
.eq(SocialUserDO::getOpenid, openid));
|
||||
return selectFirstOne(SocialUserDO::getType, type,
|
||||
SocialUserDO::getOpenid, openid);
|
||||
}
|
||||
|
||||
default PageResult<SocialUserDO> selectPage(SocialUserPageReqVO reqVO) {
|
||||
|
@@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.system.service.permission;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO;
|
||||
@@ -53,7 +54,8 @@ public class MenuServiceImpl implements MenuService {
|
||||
// 校验父菜单存在
|
||||
validateParentMenu(createReqVO.getParentId(), null);
|
||||
// 校验菜单(自己)
|
||||
validateMenu(createReqVO.getParentId(), createReqVO.getName(), null);
|
||||
validateMenuName(createReqVO.getParentId(), createReqVO.getName(), null);
|
||||
validateMenuComponentName(createReqVO.getComponentName(), null);
|
||||
|
||||
// 插入数据库
|
||||
MenuDO menu = BeanUtils.toBean(createReqVO, MenuDO.class);
|
||||
@@ -74,7 +76,8 @@ public class MenuServiceImpl implements MenuService {
|
||||
// 校验父菜单存在
|
||||
validateParentMenu(updateReqVO.getParentId(), updateReqVO.getId());
|
||||
// 校验菜单(自己)
|
||||
validateMenu(updateReqVO.getParentId(), updateReqVO.getName(), updateReqVO.getId());
|
||||
validateMenuName(updateReqVO.getParentId(), updateReqVO.getName(), updateReqVO.getId());
|
||||
validateMenuComponentName(updateReqVO.getComponentName(), updateReqVO.getId());
|
||||
|
||||
// 更新到数据库
|
||||
MenuDO updateObj = BeanUtils.toBean(updateReqVO, MenuDO.class);
|
||||
@@ -228,7 +231,7 @@ public class MenuServiceImpl implements MenuService {
|
||||
* @param id 菜单编号
|
||||
*/
|
||||
@VisibleForTesting
|
||||
void validateMenu(Long parentId, String name, Long id) {
|
||||
void validateMenuName(Long parentId, String name, Long id) {
|
||||
MenuDO menu = menuMapper.selectByParentIdAndName(parentId, name);
|
||||
if (menu == null) {
|
||||
return;
|
||||
@@ -242,6 +245,30 @@ public class MenuServiceImpl implements MenuService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验菜单组件名是否合法
|
||||
*
|
||||
* @param componentName 组件名
|
||||
* @param id 菜单编号
|
||||
*/
|
||||
@VisibleForTesting
|
||||
void validateMenuComponentName(String componentName, Long id) {
|
||||
if (StrUtil.isBlank(componentName)) {
|
||||
return;
|
||||
}
|
||||
MenuDO menu = menuMapper.selectByComponentName(componentName);
|
||||
if (menu == null) {
|
||||
return;
|
||||
}
|
||||
// 如果 id 为空,说明不用比较是否为相同 id 的菜单
|
||||
if (id == null) {
|
||||
return;
|
||||
}
|
||||
if (!menu.getId().equals(id)) {
|
||||
throw exception(MENU_COMPONENT_NAME_DUPLICATE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化菜单的通用属性。
|
||||
* <p>
|
||||
|
@@ -275,7 +275,7 @@ public class MenuServiceImplTest extends BaseDbUnitTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testValidateMenu_success() {
|
||||
public void testValidateMenu_Name_success() {
|
||||
// mock 父子菜单
|
||||
MenuDO sonMenu = createParentAndSonMenu();
|
||||
// 准备参数
|
||||
@@ -284,11 +284,11 @@ public class MenuServiceImplTest extends BaseDbUnitTest {
|
||||
String otherSonMenuName = randomString();
|
||||
|
||||
// 调用,无需断言
|
||||
menuService.validateMenu(parentId, otherSonMenuName, otherSonMenuId);
|
||||
menuService.validateMenuName(parentId, otherSonMenuName, otherSonMenuId);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testValidateMenu_sonMenuNameDuplicate() {
|
||||
public void testValidateMenu_sonMenuNameNameDuplicate() {
|
||||
// mock 父子菜单
|
||||
MenuDO sonMenu = createParentAndSonMenu();
|
||||
// 准备参数
|
||||
@@ -297,7 +297,7 @@ public class MenuServiceImplTest extends BaseDbUnitTest {
|
||||
String otherSonMenuName = sonMenu.getName(); //相同名称
|
||||
|
||||
// 调用,并断言异常
|
||||
assertServiceException(() -> menuService.validateMenu(parentId, otherSonMenuName, otherSonMenuId),
|
||||
assertServiceException(() -> menuService.validateMenuName(parentId, otherSonMenuName, otherSonMenuId),
|
||||
MENU_NAME_DUPLICATE);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user