|
|
|
|
@ -19,23 +19,33 @@ |
|
|
|
|
</resultMap> |
|
|
|
|
|
|
|
|
|
<select id="findNoUserRightByTheId" resultType="org.springblade.system.pojo.entity.User"> |
|
|
|
|
SELECT DISTINCT u.* |
|
|
|
|
FROM BLADE_USER u |
|
|
|
|
-- 关联角色表,筛选库管员角色 |
|
|
|
|
LEFT JOIN BLADE_ROLE rl |
|
|
|
|
ON TO_NUMBER(u.ROLE_ID) = rl.ID |
|
|
|
|
AND rl.IS_DELETED = 0 |
|
|
|
|
LEFT JOIN ST_USER_RIGHT r |
|
|
|
|
ON u.ID = r.USER_ID |
|
|
|
|
AND r.UR_TYPE = #{urType} |
|
|
|
|
AND r.THE_ID = #{theId} |
|
|
|
|
AND r.IS_DELETED = 0 |
|
|
|
|
WHERE r.ID IS NULL |
|
|
|
|
AND rl.ROLE_ALIAS = '保管员' |
|
|
|
|
AND rl.ID IS NOT NULL |
|
|
|
|
AND u.IS_DELETED = 0 |
|
|
|
|
-- 过滤掉ROLE_ID非数字的记录,避免转换失败 |
|
|
|
|
AND REGEXP_LIKE(u.ROLE_ID, '^[0-9]+$'); |
|
|
|
|
SELECT DISTINCT |
|
|
|
|
u.* |
|
|
|
|
FROM |
|
|
|
|
BLADE_USER u |
|
|
|
|
CROSS JOIN ( |
|
|
|
|
SELECT LEVEL AS lv FROM DUAL CONNECT BY LEVEL <= 100 -- 假设最多100个角色,可调整 |
|
|
|
|
) lvs |
|
|
|
|
-- 拆分角色ID:只保留当前LEVEL对应的角色ID |
|
|
|
|
LEFT JOIN BLADE_ROLE rl |
|
|
|
|
ON TO_NUMBER(REGEXP_SUBSTR(u.ROLE_ID, '[^,]+', 1, lvs.lv)) = rl.ID |
|
|
|
|
AND rl.IS_DELETED = 0 |
|
|
|
|
AND rl.ROLE_ALIAS = '保管员' |
|
|
|
|
-- 原有的权限关联逻辑 |
|
|
|
|
LEFT JOIN ST_USER_RIGHT r |
|
|
|
|
ON u.ID = r.USER_ID |
|
|
|
|
AND r.UR_TYPE = #{urType} |
|
|
|
|
AND r.THE_ID = #{theId} |
|
|
|
|
AND r.IS_DELETED = 0 |
|
|
|
|
WHERE |
|
|
|
|
-- 核心条件:无指定权限 |
|
|
|
|
r.ID IS NULL |
|
|
|
|
-- 确保用户关联到了库管员角色 |
|
|
|
|
AND rl.ID IS NOT NULL |
|
|
|
|
-- 用户未删除 |
|
|
|
|
AND u.IS_DELETED = 0 |
|
|
|
|
-- 过滤掉拆分后无角色ID的行(避免无效匹配) |
|
|
|
|
AND REGEXP_SUBSTR(u.ROLE_ID, '[^,]+', 1, lvs.lv) IS NOT NULL; |
|
|
|
|
</select> |
|
|
|
|
|
|
|
|
|
<select id="findByTheIdAndUrType" resultMap="stUserRightResultMap"> |
|
|
|
|
|