权限增加

This commit is contained in:
2025-12-12 11:46:55 +08:00
parent e61179ce7d
commit 95a488be12
4 changed files with 33 additions and 2 deletions

View File

@@ -240,6 +240,7 @@ INSERT INTO `tb_sys_role_permission` (id, role_id, permission_id, creator, creat
('118', 'admin', 'perm_view_message_detail', '1', now()), ('118', 'admin', 'perm_view_message_detail', '1', now()),
-- 超级管理员权限中普通管理员也需要的部分 -- 超级管理员权限中普通管理员也需要的部分
('139', 'admin', 'perm_admin_overview', '1', now()),
('119', 'admin', 'perm_admin_user_manage', '1', now()), ('119', 'admin', 'perm_admin_user_manage', '1', now()),
('120', 'admin', 'perm_admin_dept_manage', '1', now()), ('120', 'admin', 'perm_admin_dept_manage', '1', now()),
('121', 'admin', 'perm_admin_role_manage', '1', now()), ('121', 'admin', 'perm_admin_role_manage', '1', now()),

View File

@@ -23,11 +23,12 @@ public interface DeptRoleMapper extends BaseMapper<TbSysDeptRole> {
/** /**
* @description 查询部门绑定角色列表(包含名称) * @description 查询部门绑定角色列表(包含名称)
* @param userDeptRoles 用户部门角色列表(用于权限过滤)
* @return List<UserDeptRoleVO> 部门角色列表 * @return List<UserDeptRoleVO> 部门角色列表
* @author yslg * @author yslg
* @since 2025-10-06 * @since 2025-10-06
*/ */
List<UserDeptRoleVO> selectDeptRoleList(); List<UserDeptRoleVO> selectDeptRoleList(@Param("userDeptRoles") List<UserDeptRoleVO> userDeptRoles);
/** /**
* @description 批量绑定部门角色 * @description 批量绑定部门角色

View File

@@ -97,7 +97,9 @@ public class SysDepartmentServiceImpl implements SysDepartmentService {
ResultDomain<UserDeptRoleVO> resultDomain = new ResultDomain<>(); ResultDomain<UserDeptRoleVO> resultDomain = new ResultDomain<>();
try { try {
logger.info("开始查询部门角色关联列表"); logger.info("开始查询部门角色关联列表");
List<UserDeptRoleVO> deptRoles = deptRoleMapper.selectDeptRoleList(); // 获取当前用户的部门角色,用于权限过滤
List<UserDeptRoleVO> userDeptRoles = LoginUtil.getCurrentDeptRole();
List<UserDeptRoleVO> deptRoles = deptRoleMapper.selectDeptRoleList(userDeptRoles);
logger.info("查询部门角色关联列表完成,共找到{}条记录", deptRoles.size()); logger.info("查询部门角色关联列表完成,共找到{}条记录", deptRoles.size());
resultDomain.success("查询成功", deptRoles); resultDomain.success("查询成功", deptRoles);
return resultDomain; return resultDomain;

View File

@@ -79,6 +79,33 @@
FROM tb_sys_dept_role dr FROM tb_sys_dept_role dr
LEFT JOIN tb_sys_dept d ON dr.dept_id = d.dept_id AND d.deleted = 0 LEFT JOIN tb_sys_dept d ON dr.dept_id = d.dept_id AND d.deleted = 0
LEFT JOIN tb_sys_role r ON dr.role_id = r.role_id AND r.deleted = 0 LEFT JOIN tb_sys_role r ON dr.role_id = r.role_id AND r.deleted = 0
INNER JOIN tb_resource_permission rp ON d.dept_id = rp.resource_id
AND rp.resource_type = 4
AND rp.deleted = 0
AND rp.can_read = 1
AND (
-- 全局权限:所有用户可访问
(rp.dept_id IS NULL AND rp.role_id IS NULL)
<if test="userDeptRoles != null and userDeptRoles.size() > 0">
OR EXISTS (
SELECT 1
FROM (
<foreach collection="userDeptRoles" item="udr" separator=" UNION ALL ">
SELECT #{udr.deptID} AS dept_id, #{udr.deptPath} AS dept_path, #{udr.roleID} AS role_id
</foreach>
) user_roles
LEFT JOIN tb_sys_dept perm_dept ON perm_dept.dept_id = rp.dept_id AND perm_dept.deleted = 0
WHERE
-- 部门级权限当前部门或父部门通过dept_path判断继承关系
(rp.role_id IS NULL AND rp.dept_id IS NOT NULL
AND user_roles.dept_path LIKE CONCAT(perm_dept.dept_path, '%'))
-- 角色级权限:跨部门的角色权限
OR (rp.dept_id IS NULL AND rp.role_id = user_roles.role_id)
-- 精确权限:特定部门的特定角色
OR (rp.dept_id = user_roles.dept_id AND rp.role_id = user_roles.role_id)
)
</if>
)
WHERE dr.deleted = 0 WHERE dr.deleted = 0
ORDER BY dr.dept_id, dr.role_id, dr.create_time DESC ORDER BY dr.dept_id, dr.role_id, dr.create_time DESC
</select> </select>