浏览代码

update 重构用户 角色 部门 菜单的数据权限设计逻辑更符合实际业务场景与优化查询写法提高效率

疯狂的狮子Li 1 年之前
父节点
当前提交
f852949c22
共有 16 个文件被更改,包括 226 次插入257 次删除
  1. 1 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysRoleController.java
  2. 29 3
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java
  3. 47 22
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysMenuMapper.java
  4. 5 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysPostMapper.java
  5. 40 17
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysRoleMapper.java
  6. 40 8
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java
  7. 13 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserRoleMapper.java
  8. 1 1
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysRoleService.java
  9. 24 29
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java
  10. 24 26
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java
  11. 2 2
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
  12. 0 14
      ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
  13. 0 63
      ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
  14. 0 11
      ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml
  15. 0 52
      ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
  16. 0 6
      ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysRoleController.java

@@ -144,7 +144,7 @@ public class SysRoleController extends BaseController {
     @Log(title = "角色管理", businessType = BusinessType.DELETE)
     @DeleteMapping("/{roleIds}")
     public R<Void> remove(@PathVariable Long[] roleIds) {
-        return toAjax(roleService.deleteRoleByIds(roleIds));
+        return toAjax(roleService.deleteRoleByIds(List.of(roleIds)));
     }
 
     /**

+ 29 - 3
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java

@@ -3,7 +3,6 @@ package org.dromara.system.mapper;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.apache.ibatis.annotations.Param;
 import org.dromara.common.core.utils.StreamUtils;
 import org.dromara.common.mybatis.annotation.DataColumn;
 import org.dromara.common.mybatis.annotation.DataPermission;
@@ -21,6 +20,20 @@ import java.util.List;
  */
 public interface SysDeptMapper extends BaseMapperPlus<SysDept, SysDeptVo> {
 
+    default String buildDeptByRoleSql(Long roleId) {
+        return """
+                select dept_id from sys_role_dept where role_id = %d
+            """.formatted(roleId);
+    }
+
+    default String buildParentDeptByRoleSql(Long roleId) {
+        return """
+                select parent_id from sys_dept where dept_id in (
+                    select dept_id from sys_role_dept where role_id = %d
+                )
+            """.formatted(roleId);
+    }
+
     /**
      * 查询部门管理数据
      *
@@ -33,10 +46,11 @@ public interface SysDeptMapper extends BaseMapperPlus<SysDept, SysDeptVo> {
     default List<SysDeptVo> selectDeptList(Wrapper<SysDept> queryWrapper) {
         return this.selectVoList(queryWrapper);
     }
+
     /**
      * 分页查询部门管理数据
      *
-     * @param page         分页参数
+     * @param page         分页信息
      * @param queryWrapper 查询条件
      * @return 部门信息集合
      */
@@ -46,6 +60,7 @@ public interface SysDeptMapper extends BaseMapperPlus<SysDept, SysDeptVo> {
     default Page<SysDeptVo> selectPageDeptList(Page<SysDept> page, Wrapper<SysDept> queryWrapper) {
         return this.selectVoPage(page, queryWrapper);
     }
+
     /**
      * 统计指定部门ID的部门数量
      *
@@ -58,6 +73,7 @@ public interface SysDeptMapper extends BaseMapperPlus<SysDept, SysDeptVo> {
     default long countDeptById(Long deptId) {
         return this.selectCount(new LambdaQueryWrapper<SysDept>().eq(SysDept::getDeptId, deptId));
     }
+
     /**
      * 根据父部门ID查询其所有子部门的列表
      *
@@ -90,6 +106,16 @@ public interface SysDeptMapper extends BaseMapperPlus<SysDept, SysDeptVo> {
      * @param deptCheckStrictly 部门树选择项是否关联显示
      * @return 选中部门列表
      */
-    List<Long> selectDeptListByRoleId(@Param("roleId") Long roleId, @Param("deptCheckStrictly") boolean deptCheckStrictly);
+    default List<Long> selectDeptListByRoleId(Long roleId, boolean deptCheckStrictly) {
+        LambdaQueryWrapper<SysDept> wrapper = new LambdaQueryWrapper<>();
+        wrapper.select(SysDept::getDeptId)
+            .inSql(SysDept::getDeptId, this.buildDeptByRoleSql(roleId))
+            .orderByAsc(SysDept::getParentId)
+            .orderByAsc(SysDept::getOrderNum);
+        if (deptCheckStrictly) {
+            wrapper.notInSql(SysDept::getDeptId, this.buildParentDeptByRoleSql(roleId));
+        }
+        return this.selectObjs(wrapper);
+    }
 
 }

+ 47 - 22
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysMenuMapper.java

@@ -1,13 +1,10 @@
 package org.dromara.system.mapper;
 
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Constants;
 import org.dromara.common.core.constant.SystemConstants;
-import org.dromara.system.domain.SysMenu;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+import org.dromara.system.domain.SysMenu;
 import org.dromara.system.domain.vo.SysMenuVo;
-import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -18,13 +15,27 @@ import java.util.List;
  */
 public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo> {
 
-    /**
-     * 根据用户查询系统菜单列表
-     *
-     * @param queryWrapper 查询条件
-     * @return 菜单列表
-     */
-    List<SysMenu> selectMenuListByUserId(@Param(Constants.WRAPPER) Wrapper<SysMenu> queryWrapper);
+    default String buildMenuByUserSql(Long userId) {
+        return """
+                select menu_id from sys_role_menu where role_id in (
+                    select role_id from sys_user_role where user_id = %d
+                )
+            """.formatted(userId);
+    }
+
+    default String buildMenuByRoleSql(Long roleId) {
+        return """
+                select menu_id from sys_role_menu where role_id = %d
+            """.formatted(roleId);
+    }
+
+    default String buildParentMenuByRoleSql(Long roleId) {
+        return """
+                select parent_id from sys_menu where menu_id in (
+                    select menu_id from sys_role_menu where role_id = %d
+                )
+            """.formatted(roleId);
+    }
 
     /**
      * 根据用户ID查询权限
@@ -32,7 +43,13 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo> {
      * @param userId 用户ID
      * @return 权限列表
      */
-    List<String> selectMenuPermsByUserId(Long userId);
+    default List<String> selectMenuPermsByUserId(Long userId) {
+        return this.selectObjs(
+            new LambdaQueryWrapper<SysMenu>()
+                .select(SysMenu::getPerms)
+                .inSql(SysMenu::getMenuId, this.buildMenuByUserSql(userId))
+        );
+    }
 
     /**
      * 根据角色ID查询权限
@@ -40,7 +57,13 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo> {
      * @param roleId 角色ID
      * @return 权限列表
      */
-    List<String> selectMenuPermsByRoleId(Long roleId);
+    default List<String> selectMenuPermsByRoleId(Long roleId) {
+        return this.selectObjs(
+            new LambdaQueryWrapper<SysMenu>()
+                .select(SysMenu::getPerms)
+                .inSql(SysMenu::getMenuId, this.buildMenuByRoleSql(roleId))
+        );
+    }
 
     /**
      * 根据用户ID查询菜单
@@ -56,14 +79,6 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo> {
         return this.selectList(lqw);
     }
 
-    /**
-     * 根据用户ID查询菜单
-     *
-     * @param userId 用户ID
-     * @return 菜单列表
-     */
-    List<SysMenu> selectMenuTreeByUserId(Long userId);
-
     /**
      * 根据角色ID查询菜单树信息
      *
@@ -71,6 +86,16 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo> {
      * @param menuCheckStrictly 菜单树选择项是否关联显示
      * @return 选中菜单列表
      */
-    List<Long> selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly);
+    default List<Long> selectMenuListByRoleId(Long roleId, boolean menuCheckStrictly) {
+        LambdaQueryWrapper<SysMenu> wrapper = new LambdaQueryWrapper<>();
+        wrapper.select(SysMenu::getMenuId)
+            .inSql(SysMenu::getMenuId, buildMenuByRoleSql(roleId))
+            .orderByAsc(SysMenu::getParentId)
+            .orderByAsc(SysMenu::getOrderNum);
+        if (menuCheckStrictly) {
+            wrapper.notInSql(SysMenu::getMenuId, this.buildParentMenuByRoleSql(roleId));
+        }
+        return this.selectObjs(wrapper);
+    }
 
 }

+ 5 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysPostMapper.java

@@ -1,6 +1,7 @@
 package org.dromara.system.mapper;
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.dromara.common.mybatis.annotation.DataColumn;
 import org.dromara.common.mybatis.annotation.DataPermission;
@@ -31,6 +32,9 @@ public interface SysPostMapper extends BaseMapperPlus<SysPost, SysPostVo> {
      * @param userId 用户ID
      * @return 结果
      */
-    List<SysPostVo> selectPostsByUserId(Long userId);
+    default List<SysPostVo> selectPostsByUserId(Long userId) {
+        return this.selectVoList(new LambdaQueryWrapper<SysPost>()
+            .inSql(SysPost::getPostId, "select post_id from sys_user_post where user_id = " + userId));
+    }
 
 }

+ 40 - 17
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysRoleMapper.java

@@ -1,6 +1,7 @@
 package org.dromara.system.mapper;
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
@@ -19,11 +20,26 @@ import java.util.List;
  */
 public interface SysRoleMapper extends BaseMapperPlus<SysRole, SysRoleVo> {
 
+    default String buildRoleByUserSql(Long userId) {
+        return """
+                select role_id from sys_user_role where user_id = %d
+            """.formatted(userId);
+    }
+
+    /**
+     * 分页查询角色列表
+     *
+     * @param page         分页对象
+     * @param queryWrapper 查询条件
+     * @return 包含角色信息的分页结果
+     */
     @DataPermission({
-        @DataColumn(key = "deptName", value = "d.dept_id"),
-        @DataColumn(key = "userName", value = "r.create_by")
+        @DataColumn(key = "deptName", value = "create_dept"),
+        @DataColumn(key = "userName", value = "create_by")
     })
-    Page<SysRoleVo> selectPageRoleList(@Param("page") Page<SysRole> page, @Param(Constants.WRAPPER) Wrapper<SysRole> queryWrapper);
+    default Page<SysRoleVo> selectPageRoleList(@Param("page") Page<SysRole> page, @Param(Constants.WRAPPER) Wrapper<SysRole> queryWrapper) {
+        return this.selectVoPage(page, queryWrapper);
+    }
 
     /**
      * 根据条件分页查询角色数据
@@ -32,24 +48,26 @@ public interface SysRoleMapper extends BaseMapperPlus<SysRole, SysRoleVo> {
      * @return 角色数据集合信息
      */
     @DataPermission({
-        @DataColumn(key = "deptName", value = "d.dept_id"),
-        @DataColumn(key = "userName", value = "r.create_by")
+        @DataColumn(key = "deptName", value = "create_dept"),
+        @DataColumn(key = "userName", value = "create_by")
     })
-    List<SysRoleVo> selectRoleList(@Param(Constants.WRAPPER) Wrapper<SysRole> queryWrapper);
-
-    @DataPermission({
-        @DataColumn(key = "deptName", value = "d.dept_id"),
-        @DataColumn(key = "userName", value = "r.create_by")
-    })
-    SysRoleVo selectRoleById(Long roleId);
+    default List<SysRoleVo> selectRoleList(@Param(Constants.WRAPPER) Wrapper<SysRole> queryWrapper) {
+        return this.selectVoList(queryWrapper);
+    }
 
     /**
-     * 根据用户ID查询角色
+     * 根据角色ID查询角色信息
      *
-     * @param userId 用户ID
-     * @return 角色列表
+     * @param roleId 角色ID
+     * @return 对应的角色信息
      */
-    List<SysRoleVo> selectRolePermissionByUserId(Long userId);
+    @DataPermission({
+        @DataColumn(key = "deptName", value = "r.create_dept"),
+        @DataColumn(key = "userName", value = "r.create_by")
+    })
+    default SysRoleVo selectRoleById(Long roleId) {
+        return this.selectVoById(roleId);
+    }
 
     /**
      * 根据用户ID查询角色
@@ -57,6 +75,11 @@ public interface SysRoleMapper extends BaseMapperPlus<SysRole, SysRoleVo> {
      * @param userId 用户ID
      * @return 角色列表
      */
-    List<SysRoleVo> selectRolesByUserId(Long userId);
+    default List<SysRoleVo> selectRolesByUserId(Long userId) {
+        return this.selectVoList(new LambdaQueryWrapper<SysRole>()
+            .select(SysRole::getRoleId, SysRole::getRoleName, SysRole::getRoleKey,
+                SysRole::getRoleSort, SysRole::getDataScope, SysRole::getStatus)
+            .inSql(SysRole::getRoleId, this.buildRoleByUserSql(userId)));
+    }
 
 }

+ 40 - 8
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java

@@ -21,17 +21,30 @@ import java.util.List;
  */
 public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
 
+    /**
+     * 分页查询用户列表,并进行数据权限控制
+     *
+     * @param page         分页参数
+     * @param queryWrapper 查询条件
+     * @return 分页的用户信息
+     */
     @DataPermission({
         @DataColumn(key = "deptName", value = "dept_id"),
-        @DataColumn(key = "userName", value = "user_id")
+        @DataColumn(key = "userName", value = "create_by")
     })
     default Page<SysUserVo> selectPageUserList(Page<SysUser> page, Wrapper<SysUser> queryWrapper) {
         return this.selectVoPage(page, queryWrapper);
     }
 
+    /**
+     * 查询用户列表,并进行数据权限控制
+     *
+     * @param queryWrapper 查询条件
+     * @return 用户信息集合
+     */
     @DataPermission({
         @DataColumn(key = "deptName", value = "dept_id"),
-        @DataColumn(key = "userName", value = "user_id")
+        @DataColumn(key = "userName", value = "create_by")
     })
     default List<SysUserVo> selectUserList(Wrapper<SysUser> queryWrapper) {
         return this.selectVoList(queryWrapper);
@@ -45,7 +58,7 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
      */
     @DataPermission({
         @DataColumn(key = "deptName", value = "d.dept_id"),
-        @DataColumn(key = "userName", value = "u.user_id")
+        @DataColumn(key = "userName", value = "u.create_by")
     })
     List<SysUserExportVo> selectUserExportList(@Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
 
@@ -58,7 +71,7 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
      */
     @DataPermission({
         @DataColumn(key = "deptName", value = "d.dept_id"),
-        @DataColumn(key = "userName", value = "u.user_id")
+        @DataColumn(key = "userName", value = "u.create_by")
     })
     Page<SysUserVo> selectAllocatedList(@Param("page") Page<SysUser> page, @Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
 
@@ -70,29 +83,48 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
      */
     @DataPermission({
         @DataColumn(key = "deptName", value = "d.dept_id"),
-        @DataColumn(key = "userName", value = "u.user_id")
+        @DataColumn(key = "userName", value = "u.create_by")
     })
     Page<SysUserVo> selectUnallocatedList(@Param("page") Page<SysUser> page, @Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
 
+    /**
+     * 根据用户ID统计用户数量
+     *
+     * @param userId 用户ID
+     * @return 用户数量
+     */
     @DataPermission({
         @DataColumn(key = "deptName", value = "dept_id"),
-        @DataColumn(key = "userName", value = "user_id")
+        @DataColumn(key = "userName", value = "create_by")
     })
     default long countUserById(Long userId) {
         return this.selectCount(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserId, userId));
     }
 
+    /**
+     * 根据条件更新用户数据
+     *
+     * @param user          要更新的用户实体
+     * @param updateWrapper 更新条件封装器
+     * @return 更新操作影响的行数
+     */
     @Override
     @DataPermission({
         @DataColumn(key = "deptName", value = "dept_id"),
-        @DataColumn(key = "userName", value = "user_id")
+        @DataColumn(key = "userName", value = "create_by")
     })
     int update(@Param(Constants.ENTITY) SysUser user, @Param(Constants.WRAPPER) Wrapper<SysUser> updateWrapper);
 
+    /**
+     * 根据用户ID更新用户数据
+     *
+     * @param user 要更新的用户实体
+     * @return 更新操作影响的行数
+     */
     @Override
     @DataPermission({
         @DataColumn(key = "deptName", value = "dept_id"),
-        @DataColumn(key = "userName", value = "user_id")
+        @DataColumn(key = "userName", value = "create_by")
     })
     int updateById(@Param(Constants.ENTITY) SysUser user);
 

+ 13 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserRoleMapper.java

@@ -1,5 +1,6 @@
 package org.dromara.system.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
 import org.dromara.system.domain.SysUserRole;
 
@@ -12,6 +13,17 @@ import java.util.List;
  */
 public interface SysUserRoleMapper extends BaseMapperPlus<SysUserRole, SysUserRole> {
 
-    List<Long> selectUserIdsByRoleId(Long roleId);
+    /**
+     * 根据角色ID查询关联的用户ID列表
+     *
+     * @param roleId 角色ID
+     * @return 关联到指定角色的用户ID列表
+     */
+    default List<Long> selectUserIdsByRoleId(Long roleId) {
+        return this.selectObjs(new LambdaQueryWrapper<SysUserRole>()
+            .select(SysUserRole::getUserId).inSql(SysUserRole::getRoleId,
+                "select role_id from sys_role where role_id = " + roleId)
+        );
+    }
 
 }

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysRoleService.java

@@ -167,7 +167,7 @@ public interface ISysRoleService {
      * @param roleIds 需要删除的角色ID
      * @return 结果
      */
-    int deleteRoleByIds(Long[] roleIds);
+    int deleteRoleByIds(List<Long> roleIds);
 
     /**
      * 取消授权用户角色

+ 24 - 29
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java

@@ -5,8 +5,6 @@ import cn.hutool.core.convert.Convert;
 import cn.hutool.core.lang.tree.Tree;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.constant.Constants;
 import org.dromara.common.core.constant.SystemConstants;
@@ -67,29 +65,20 @@ public class SysMenuServiceImpl implements ISysMenuService {
     @Override
     public List<SysMenuVo> selectMenuList(SysMenuBo menu, Long userId) {
         List<SysMenuVo> menuList;
-        // 管理员显示所有菜单信息
-        if (LoginHelper.isSuperAdmin(userId)) {
-            menuList = baseMapper.selectVoList(new LambdaQueryWrapper<SysMenu>()
-                .like(StringUtils.isNotBlank(menu.getMenuName()), SysMenu::getMenuName, menu.getMenuName())
+        LambdaQueryWrapper<SysMenu> wrapper = new LambdaQueryWrapper<>();
+        // 管理员显示所有菜单信息 不是管理员 按用户id过滤菜单
+        if (!LoginHelper.isSuperAdmin(userId)) {
+            // 通过用户id获取角色id 通过角色id获取菜单id 然后in菜单
+            wrapper.inSql(SysMenu::getMenuId, baseMapper.buildMenuByUserSql(userId));
+        }
+        menuList = baseMapper.selectVoList(
+            wrapper.like(StringUtils.isNotBlank(menu.getMenuName()), SysMenu::getMenuName, menu.getMenuName())
                 .eq(StringUtils.isNotBlank(menu.getVisible()), SysMenu::getVisible, menu.getVisible())
                 .eq(StringUtils.isNotBlank(menu.getStatus()), SysMenu::getStatus, menu.getStatus())
                 .eq(StringUtils.isNotBlank(menu.getMenuType()), SysMenu::getMenuType, menu.getMenuType())
                 .eq(ObjectUtil.isNotNull(menu.getParentId()), SysMenu::getParentId, menu.getParentId())
                 .orderByAsc(SysMenu::getParentId)
                 .orderByAsc(SysMenu::getOrderNum));
-        } else {
-            QueryWrapper<SysMenu> wrapper = Wrappers.query();
-            wrapper.inSql("r.role_id", "select role_id from sys_user_role where user_id = " + userId)
-                .like(StringUtils.isNotBlank(menu.getMenuName()), "m.menu_name", menu.getMenuName())
-                .eq(StringUtils.isNotBlank(menu.getVisible()), "m.visible", menu.getVisible())
-                .eq(StringUtils.isNotBlank(menu.getStatus()), "m.status", menu.getStatus())
-                .eq(StringUtils.isNotBlank(menu.getMenuType()), "m.menu_type", menu.getMenuType())
-                .eq(ObjectUtil.isNotNull(menu.getParentId()), "m.parent_id", menu.getParentId())
-                .orderByAsc("m.parent_id")
-                .orderByAsc("m.order_num");
-            List<SysMenu> list = baseMapper.selectMenuListByUserId(wrapper);
-            menuList = MapstructUtils.convert(list, SysMenuVo.class);
-        }
         return menuList;
     }
 
@@ -141,7 +130,13 @@ public class SysMenuServiceImpl implements ISysMenuService {
         if (LoginHelper.isSuperAdmin(userId)) {
             menus = baseMapper.selectMenuTreeAll();
         } else {
-            menus = baseMapper.selectMenuTreeByUserId(userId);
+            LambdaQueryWrapper<SysMenu> wrapper = new LambdaQueryWrapper<>();
+            menus = baseMapper.selectList(
+                wrapper.in(SysMenu::getMenuType, SystemConstants.TYPE_DIR, SystemConstants.TYPE_MENU)
+                    .eq(SysMenu::getStatus, SystemConstants.NORMAL)
+                    .inSql(SysMenu::getMenuId, baseMapper.buildMenuByUserSql(userId))
+                    .orderByAsc(SysMenu::getParentId)
+                    .orderByAsc(SysMenu::getOrderNum));
         }
         return getChildPerms(menus, Constants.TOP_PARENT_ID);
     }
@@ -169,7 +164,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
         SysTenantPackage tenantPackage = tenantPackageMapper.selectById(packageId);
         List<Long> menuIds = StringUtils.splitTo(tenantPackage.getMenuIds(), Convert::toLong);
         if (CollUtil.isEmpty(menuIds)) {
-            return new ArrayList<>();
+            return List.of();
         }
         List<Long> parentIds = null;
         if (tenantPackage.getMenuCheckStrictly()) {
@@ -285,25 +280,25 @@ public class SysMenuServiceImpl implements ISysMenuService {
     }
 
     /**
-     * 查询菜单使用数量
+     * 是否存在菜单子节点
      *
-     * @param menuId 菜单ID
+     * @param menuIds 菜单ID
      * @return 结果
      */
     @Override
-    public boolean checkMenuExistRole(Long menuId) {
-        return roleMenuMapper.exists(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getMenuId, menuId));
+    public boolean hasChildByMenuId(List<Long> menuIds) {
+        return baseMapper.exists(new LambdaQueryWrapper<SysMenu>().in(SysMenu::getParentId, menuIds).notIn(SysMenu::getMenuId, menuIds));
     }
 
     /**
-     * 是否存在菜单子节点
+     * 查询菜单使用数量
      *
-     * @param menuIds 菜单ID
+     * @param menuId 菜单ID
      * @return 结果
      */
     @Override
-    public boolean hasChildByMenuId(List<Long> menuIds) {
-        return baseMapper.exists(new LambdaQueryWrapper<SysMenu>().in(SysMenu::getParentId, menuIds).notIn(SysMenu::getMenuId, menuIds));
+    public boolean checkMenuExistRole(Long menuId) {
+        return roleMenuMapper.exists(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getMenuId, menuId));
     }
 
     /**

+ 24 - 26
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java

@@ -7,14 +7,13 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.constant.CacheNames;
-import org.dromara.common.core.constant.TenantConstants;
 import org.dromara.common.core.constant.SystemConstants;
+import org.dromara.common.core.constant.TenantConstants;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StreamUtils;
@@ -73,15 +72,14 @@ public class SysRoleServiceImpl implements ISysRoleService {
 
     private Wrapper<SysRole> buildQueryWrapper(SysRoleBo bo) {
         Map<String, Object> params = bo.getParams();
-        QueryWrapper<SysRole> wrapper = Wrappers.query();
-        wrapper.eq("r.del_flag", SystemConstants.NORMAL)
-            .eq(ObjectUtil.isNotNull(bo.getRoleId()), "r.role_id", bo.getRoleId())
-            .like(StringUtils.isNotBlank(bo.getRoleName()), "r.role_name", bo.getRoleName())
-            .eq(StringUtils.isNotBlank(bo.getStatus()), "r.status", bo.getStatus())
-            .like(StringUtils.isNotBlank(bo.getRoleKey()), "r.role_key", bo.getRoleKey())
+        LambdaQueryWrapper<SysRole> wrapper = Wrappers.lambdaQuery();
+        wrapper.eq(ObjectUtil.isNotNull(bo.getRoleId()), SysRole::getRoleId, bo.getRoleId())
+            .like(StringUtils.isNotBlank(bo.getRoleName()), SysRole::getRoleName, bo.getRoleName())
+            .eq(StringUtils.isNotBlank(bo.getStatus()), SysRole::getStatus, bo.getStatus())
+            .like(StringUtils.isNotBlank(bo.getRoleKey()), SysRole::getRoleKey, bo.getRoleKey())
             .between(params.get("beginTime") != null && params.get("endTime") != null,
-                "r.create_time", params.get("beginTime"), params.get("endTime"))
-            .orderByAsc("r.role_sort").orderByAsc("r.create_time");
+                SysRole::getCreateTime, params.get("beginTime"), params.get("endTime"))
+            .orderByAsc(SysRole::getRoleSort).orderByAsc(SysRole::getCreateTime);
         return wrapper;
     }
 
@@ -175,9 +173,9 @@ public class SysRoleServiceImpl implements ISysRoleService {
      */
     @Override
     public List<SysRoleVo> selectRoleByIds(List<Long> roleIds) {
-        return baseMapper.selectRoleList(new QueryWrapper<SysRole>()
-            .eq("r.status", SystemConstants.NORMAL)
-            .in(CollUtil.isNotEmpty(roleIds), "r.role_id", roleIds));
+        return baseMapper.selectRoleList(new LambdaQueryWrapper<SysRole>()
+            .eq(SysRole::getStatus, SystemConstants.NORMAL)
+            .in(CollUtil.isNotEmpty(roleIds), SysRole::getRoleId, roleIds));
     }
 
     /**
@@ -351,14 +349,14 @@ public class SysRoleServiceImpl implements ISysRoleService {
     private int insertRoleMenu(SysRoleBo role) {
         int rows = 1;
         // 新增用户与角色管理
-        List<SysRoleMenu> list = new ArrayList<SysRoleMenu>();
+        List<SysRoleMenu> list = new ArrayList<>();
         for (Long menuId : role.getMenuIds()) {
             SysRoleMenu rm = new SysRoleMenu();
             rm.setRoleId(role.getRoleId());
             rm.setMenuId(menuId);
             list.add(rm);
         }
-        if (list.size() > 0) {
+        if (CollUtil.isEmpty(list)) {
             rows = roleMenuMapper.insertBatch(list) ? list.size() : 0;
         }
         return rows;
@@ -372,14 +370,14 @@ public class SysRoleServiceImpl implements ISysRoleService {
     private int insertRoleDept(SysRoleBo role) {
         int rows = 1;
         // 新增角色与部门(数据权限)管理
-        List<SysRoleDept> list = new ArrayList<SysRoleDept>();
+        List<SysRoleDept> list = new ArrayList<>();
         for (Long deptId : role.getDeptIds()) {
             SysRoleDept rd = new SysRoleDept();
             rd.setRoleId(role.getRoleId());
             rd.setDeptId(deptId);
             list.add(rd);
         }
-        if (list.size() > 0) {
+        if (CollUtil.isEmpty(list)) {
             rows = roleDeptMapper.insertBatch(list) ? list.size() : 0;
         }
         return rows;
@@ -411,21 +409,20 @@ public class SysRoleServiceImpl implements ISysRoleService {
     @CacheEvict(cacheNames = CacheNames.SYS_ROLE_CUSTOM, allEntries = true)
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int deleteRoleByIds(Long[] roleIds) {
-        for (Long roleId : roleIds) {
-            SysRole role = baseMapper.selectById(roleId);
+    public int deleteRoleByIds(List<Long> roleIds) {
+        List<SysRole> roles = baseMapper.selectByIds(roleIds);
+        for (SysRole role : roles) {
             checkRoleAllowed(BeanUtil.toBean(role, SysRoleBo.class));
-            checkRoleDataScope(roleId);
-            if (countUserRoleByRoleId(roleId) > 0) {
+            checkRoleDataScope(role.getRoleId());
+            if (countUserRoleByRoleId(role.getRoleId()) > 0) {
                 throw new ServiceException(String.format("%1$s已分配,不能删除!", role.getRoleName()));
             }
         }
-        List<Long> ids = Arrays.asList(roleIds);
         // 删除角色与菜单关联
-        roleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>().in(SysRoleMenu::getRoleId, ids));
+        roleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>().in(SysRoleMenu::getRoleId, roleIds));
         // 删除角色与部门关联
-        roleDeptMapper.delete(new LambdaQueryWrapper<SysRoleDept>().in(SysRoleDept::getRoleId, ids));
-        return baseMapper.deleteByIds(ids);
+        roleDeptMapper.delete(new LambdaQueryWrapper<SysRoleDept>().in(SysRoleDept::getRoleId, roleIds));
+        return baseMapper.deleteByIds(roleIds);
     }
 
     /**
@@ -547,4 +544,5 @@ public class SysRoleServiceImpl implements ISysRoleService {
             }
         });
     }
+
 }

+ 2 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java

@@ -479,8 +479,8 @@ public class SysUserServiceImpl implements ISysUserService {
             }
             // 判断是否具有此角色的操作权限
             List<SysRoleVo> roles = roleMapper.selectRoleList(
-                new QueryWrapper<SysRole>().in("r.role_id", roleList));
-            if (CollUtil.isEmpty(roles)) {
+                new LambdaQueryWrapper<SysRole>().in(SysRole::getRoleId, roleList));
+            if (CollUtil.isEmpty(roles) || roles.size() != roleList.size()) {
                 throw new ServiceException("没有权限访问角色的数据");
             }
             if (clear) {

+ 0 - 14
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml

@@ -4,18 +4,4 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.dromara.system.mapper.SysDeptMapper">
 
-    <resultMap type="org.dromara.system.domain.vo.SysDeptVo" id="SysDeptResult">
-    </resultMap>
-
-    <select id="selectDeptListByRoleId" resultType="Long">
-        select d.dept_id
-        from sys_dept d
-            left join sys_role_dept rd on d.dept_id = rd.dept_id
-        where rd.role_id = #{roleId}
-            <if test="deptCheckStrictly">
-                and d.dept_id not in (select d.parent_id from sys_dept d inner join sys_role_dept rd on d.dept_id = rd.dept_id and rd.role_id = #{roleId})
-            </if>
-        order by d.parent_id, d.order_num
-    </select>
-
 </mapper>

+ 0 - 63
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml

@@ -4,67 +4,4 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.dromara.system.mapper.SysMenuMapper">
 
-    <resultMap type="org.dromara.system.domain.SysMenu" id="SysMenuResult">
-    </resultMap>
-
-    <select id="selectMenuListByUserId" resultMap="SysMenuResult">
-        select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.query_param, m.visible, m.status,
-        m.perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
-        from sys_menu m
-        left join sys_role_menu rm on m.menu_id = rm.menu_id
-        left join sys_role r on rm.role_id = r.role_id
-        ${ew.getCustomSqlSegment}
-    </select>
-
-    <select id="selectMenuTreeByUserId" parameterType="Long" resultMap="SysMenuResult">
-        select distinct m.menu_id,
-                        m.parent_id,
-                        m.menu_name,
-                        m.path,
-                        m.component,
-                        m.query_param,
-                        m.visible,
-                        m.status,
-                        m.perms,
-                        m.is_frame,
-                        m.is_cache,
-                        m.menu_type,
-                        m.icon,
-                        m.order_num,
-                        m.create_time
-        from sys_menu m
-        left join sys_role_menu rm on m.menu_id = rm.menu_id and m.status = '0'
-        left join sys_role r on rm.role_id = r.role_id and r.status = '0'
-        where m.menu_type in ('M', 'C')
-            and r.role_id in (select role_id from sys_user_role where user_id = #{userId})
-        order by m.parent_id, m.order_num
-    </select>
-
-    <select id="selectMenuListByRoleId" resultType="Long">
-        select m.menu_id
-        from sys_menu m
-        left join sys_role_menu rm on m.menu_id = rm.menu_id
-        where rm.role_id = #{roleId}
-        <if test="menuCheckStrictly">
-            and m.menu_id not in (select m.parent_id from sys_menu m inner join sys_role_menu rm on m.menu_id =
-            rm.menu_id and rm.role_id = #{roleId})
-        </if>
-        order by m.parent_id, m.order_num
-    </select>
-
-    <select id="selectMenuPermsByUserId" parameterType="Long" resultType="String">
-        select distinct m.perms
-        from sys_menu m
-        left join sys_role_menu rm on m.menu_id = rm.menu_id and m.status = '0'
-        left join sys_role r on r.role_id = rm.role_id and r.status = '0'
-        where r.role_id in (select role_id from sys_user_role where user_id = #{userId})
-    </select>
-
-    <select id="selectMenuPermsByRoleId" parameterType="Long" resultType="String">
-        select distinct m.perms
-        from sys_menu m
-                 left join sys_role_menu rm on m.menu_id = rm.menu_id
-        where m.status = '0' and rm.role_id = #{roleId}
-    </select>
-
 </mapper>

+ 0 - 11
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml

@@ -4,15 +4,4 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.dromara.system.mapper.SysPostMapper">
 
-    <resultMap type="org.dromara.system.domain.vo.SysPostVo" id="SysPostResult">
-    </resultMap>
-
-    <select id="selectPostsByUserId" parameterType="Long" resultMap="SysPostResult">
-        select p.post_id, p.dept_id, p.post_name, p.post_code, p.post_category
-        from sys_post p
-                 left join sys_user_post up on up.post_id = p.post_id
-                 left join sys_user u on u.user_id = up.user_id
-        where u.user_id = #{userId}
-    </select>
-
 </mapper>

+ 0 - 52
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml

@@ -4,56 +4,4 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.dromara.system.mapper.SysRoleMapper">
 
-    <resultMap type="org.dromara.system.domain.vo.SysRoleVo" id="SysRoleResult">
-    </resultMap>
-
-    <sql id="selectRoleVo">
-        select distinct r.role_id,
-                        r.role_name,
-                        r.role_key,
-                        r.role_sort,
-                        r.data_scope,
-                        r.menu_check_strictly,
-                        r.dept_check_strictly,
-                        r.status,
-                        r.del_flag,
-                        r.create_time,
-                        r.remark
-        from sys_role r
-                 left join sys_user_role sur on sur.role_id = r.role_id
-                 left join sys_user u on u.user_id = sur.user_id
-                 left join sys_dept d on u.dept_id = d.dept_id
-    </sql>
-
-    <select id="selectPageRoleList" resultMap="SysRoleResult">
-        <include refid="selectRoleVo"/>
-        ${ew.getCustomSqlSegment}
-    </select>
-
-    <select id="selectRoleList" resultMap="SysRoleResult">
-        <include refid="selectRoleVo"/>
-        ${ew.getCustomSqlSegment}
-    </select>
-
-    <select id="selectRolePermissionByUserId" parameterType="Long" resultMap="SysRoleResult">
-        <include refid="selectRoleVo"/>
-        WHERE r.del_flag = '0' and sur.user_id = #{userId}
-    </select>
-
-    <select id="selectRolesByUserId" parameterType="Long" resultMap="SysRoleResult">
-        select r.role_id,
-               r.role_name,
-               r.role_key,
-               r.role_sort,
-               r.data_scope,
-               r.status
-        from sys_role r
-        WHERE r.del_flag = '0' and r.role_id in (select role_id from sys_user_role where user_id = #{userId})
-    </select>
-
-    <select id="selectRoleById" resultMap="SysRoleResult">
-        <include refid="selectRoleVo"/>
-        WHERE r.del_flag = '0' and r.role_id = #{roleId}
-    </select>
-
 </mapper>

+ 0 - 6
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml

@@ -4,10 +4,4 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.dromara.system.mapper.SysUserRoleMapper">
 
-    <select id="selectUserIdsByRoleId" resultType="Long">
-        select u.user_id from sys_user u
-        inner join sys_user_role sur
-            on u.user_id = sur.user_id and sur.role_id = #{roleId}
-    </select>
-
 </mapper>