权限增加
This commit is contained in:
@@ -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()),
|
||||
|
||||
-- 超级管理员权限中普通管理员也需要的部分
|
||||
('139', 'admin', 'perm_admin_overview', '1', now()),
|
||||
('119', 'admin', 'perm_admin_user_manage', '1', now()),
|
||||
('120', 'admin', 'perm_admin_dept_manage', '1', now()),
|
||||
('121', 'admin', 'perm_admin_role_manage', '1', now()),
|
||||
|
||||
@@ -23,11 +23,12 @@ public interface DeptRoleMapper extends BaseMapper<TbSysDeptRole> {
|
||||
|
||||
/**
|
||||
* @description 查询部门绑定角色列表(包含名称)
|
||||
* @param userDeptRoles 用户部门角色列表(用于权限过滤)
|
||||
* @return List<UserDeptRoleVO> 部门角色列表
|
||||
* @author yslg
|
||||
* @since 2025-10-06
|
||||
*/
|
||||
List<UserDeptRoleVO> selectDeptRoleList();
|
||||
List<UserDeptRoleVO> selectDeptRoleList(@Param("userDeptRoles") List<UserDeptRoleVO> userDeptRoles);
|
||||
|
||||
/**
|
||||
* @description 批量绑定部门角色
|
||||
|
||||
@@ -97,7 +97,9 @@ public class SysDepartmentServiceImpl implements SysDepartmentService {
|
||||
ResultDomain<UserDeptRoleVO> resultDomain = new ResultDomain<>();
|
||||
try {
|
||||
logger.info("开始查询部门角色关联列表");
|
||||
List<UserDeptRoleVO> deptRoles = deptRoleMapper.selectDeptRoleList();
|
||||
// 获取当前用户的部门角色,用于权限过滤
|
||||
List<UserDeptRoleVO> userDeptRoles = LoginUtil.getCurrentDeptRole();
|
||||
List<UserDeptRoleVO> deptRoles = deptRoleMapper.selectDeptRoleList(userDeptRoles);
|
||||
logger.info("查询部门角色关联列表完成,共找到{}条记录", deptRoles.size());
|
||||
resultDomain.success("查询成功", deptRoles);
|
||||
return resultDomain;
|
||||
|
||||
@@ -79,6 +79,33 @@
|
||||
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_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
|
||||
ORDER BY dr.dept_id, dr.role_id, dr.create_time DESC
|
||||
</select>
|
||||
|
||||
Reference in New Issue
Block a user