SELECT DISTINCT m.`perms` FROM sys_user_role ur LEFT JOIN `sys_role` r ON ur.`role_id` = r.`id` LEFT JOIN `sys_role_menu` rm ON ur.`role_id` = rm.`role_id` LEFT JOIN `sys_menu` m ON m.`id` = rm.`menu_id` WHERE user_id = #{userId} AND r.`status` = 0 AND m.`status` = 0
时间: 2024-02-14 13:19:05 浏览: 30
这是一段 SQL 查询语句,作用是查询指定用户ID所拥有的所有权限perms。具体的查询逻辑是,先通过sys_user_role表和sys_role表获取该用户所属的所有角色,然后通过sys_role_menu表和sys_menu表获取每个角色所对应的菜单ID,最后通过菜单ID获取每个菜单对应的权限perms。其中,通过LEFT JOIN关键字实现了多张表之间的联接查询,通过DISTINCT关键字去重,通过status字段过滤掉已经被禁用的角色和菜单。需要注意的是,该查询语句是使用了占位符(#{userId})的MyBatis动态SQL语句,具体的参数值需要在运行时传入。
相关问题
SELECT DISTINCT m.* FROM sys_menu m LEFT JOIN sys_role_menu rm ON m.menu_id = rm.menu_id LEFT JOIN sys_role r ON r.role_id = rm.role_id WHERE r.role_id IN (SELECT role_id FROM sys_user_role WHERE user_id=?) AND m.TYPE = 0 ORDER BY m.order_num
这是一条 SQL 查询语句,用于查询指定用户所拥有的菜单权限。具体来说,该语句会查询 sys_menu 表中所有类型为菜单的记录,并且这些菜单所对应的角色中包含该用户所拥有的角色的记录。查询结果按照菜单的 order_num 字段进行排序。其中,`?` 表示一个占位符,需要在执行查询时传入实际的用户 ID 值。
public List<SysMenu> getByUserId(Long userId) { String nativeSql = "SELECT DISTINCT m.* FROM sys_menu m "; nativeSql +="LEFT JOIN sys_role_menu rm ON m.menu_id = rm.menu_id "; nativeSql +="LEFT JOIN sys_role r ON r.role_id = rm.role_id "; nativeSql +="WHERE r.role_id IN (SELECT role_id FROM sys_user_role WHERE user_id=?) "; nativeSql +="AND m.TYPE = 0 ORDER BY m.order_num"; List<SysMenu> list = dynamicQuery.query(SysMenu.class,nativeSql,new Object[]{userId}); list.stream().forEach(menu->{ String subSql = "SELECT DISTINCT m.* FROM sys_menu m "; subSql +="LEFT JOIN sys_role_menu rm ON m.menu_id = rm.menu_id "; subSql +="LEFT JOIN sys_role r ON r.role_id = rm.role_id "; subSql +="WHERE r.role_id IN (SELECT role_id FROM sys_user_role WHERE user_id=?) "; subSql +="AND m.parent_id = ? ORDER BY m.order_num"; List<SysMenu> subList = dynamicQuery.query(SysMenu.class,subSql,new Object[]{userId,menu.getMenuId()}); menu.setList(subList); }); return list; }
这段代码是一个通过用户ID获取菜单列表的方法。它使用了原生SQL语句,通过左连接查询sys_menu、sys_role_menu和sys_role表来获取与用户关联的菜单列表。其中,子查询通过parent_id字段来获取每个菜单的子菜单列表,并将其设置到父菜单的list属性中。最后,返回一个包含菜单列表的List<SysMenu>对象。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)