Merge remote-tracking branch 'origin/main'

This commit is contained in:
liuzhaotian
2024-06-17 14:12:48 +08:00
4 changed files with 30 additions and 14 deletions
@@ -27,11 +27,11 @@ public interface RoleMapper extends BaseMapperX<RoleDO> {
lambdaQueryWrapperX.inIfPresent(RoleDO::getOrganId,0L,loginUser.getOrganId()); lambdaQueryWrapperX.inIfPresent(RoleDO::getOrganId,0L,loginUser.getOrganId());
}*/ }*/
if(isSupAdmin && ObjectUtil.isNotNull(reqVO.getOrganId())) { if(isSupAdmin && ObjectUtil.isNotNull(reqVO.getOrganId())) {
//如果是超级管理员并且传入organId,就查看传入的组织 //如果是超级管理员并且传入organId,就查看组织id为0(内置角色)和传入的组织
lambdaQueryWrapperX.eqIfPresent(RoleDO::getOrganId, reqVO.getOrganId()); lambdaQueryWrapperX.inIfPresent(RoleDO::getOrganId, 0L, reqVO.getOrganId());
} else { } else {
//如果不是,就查看组织id为0和自身的组织 //如果不是,就查看组织id为0(内置角色)和自身的组织
lambdaQueryWrapperX.inIfPresent(RoleDO::getOrganId,0L,loginUser.getOrganId()); lambdaQueryWrapperX.inIfPresent(RoleDO::getOrganId, 0L, loginUser.getOrganId());
} }
lambdaQueryWrapperX.likeIfPresent(RoleDO::getName, reqVO.getName()) lambdaQueryWrapperX.likeIfPresent(RoleDO::getName, reqVO.getName())
@@ -11,5 +11,5 @@ public interface RedisRefreshChannelTopicConstants {
/** /**
* 刷新权限 * 刷新权限
*/ */
String PREMISSION_REFRESH = "PREMISSION_REFRESH"; String PERMISSION_REFRESH = "PERMISSION_REFRESH";
} }
@@ -3,25 +3,24 @@ package com.cf.imes.module.system.dal.redis.listener;
import com.cf.imes.framework.mq.redis.core.pubsub.AbstractRedisSimpleMessageListener; import com.cf.imes.framework.mq.redis.core.pubsub.AbstractRedisSimpleMessageListener;
import com.cf.imes.framework.security.core.service.SecurityFrameworkService; import com.cf.imes.framework.security.core.service.SecurityFrameworkService;
import com.cf.imes.module.system.dal.redis.RedisRefreshChannelTopicConstants; import com.cf.imes.module.system.dal.redis.RedisRefreshChannelTopicConstants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.Message; import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.listener.ChannelTopic; import org.springframework.data.redis.listener.ChannelTopic;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/** /**
* system PREMISSION_REFRESH redis监听器 * system PERMISSION_REFRESH redis监听器
* *
* @author Gqr * @author Gqr
* @since 2024/6/13 10:32 * @since 2024/6/13 10:32
*/ */
@Component @Component
public class SystemPremissionRefreshRedisListener extends AbstractRedisSimpleMessageListener { public class SystemPermissionRefreshRedisListener extends AbstractRedisSimpleMessageListener {
@Autowired private final SecurityFrameworkService securityFrameworkService;
private SecurityFrameworkService securityFrameworkService;
public SystemPremissionRefreshRedisListener() { public SystemPermissionRefreshRedisListener(SecurityFrameworkService securityFrameworkService) {
super.setTopic(new ChannelTopic(RedisRefreshChannelTopicConstants.PREMISSION_REFRESH)); super.setTopic(new ChannelTopic(RedisRefreshChannelTopicConstants.PERMISSION_REFRESH));
this.securityFrameworkService = securityFrameworkService;
} }
@Override @Override
@@ -10,6 +10,7 @@ import com.cf.imes.framework.datapermission.core.annotation.DataPermission;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX; import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.organ.core.aop.OrganIgnore; import com.cf.imes.framework.organ.core.aop.OrganIgnore;
import com.cf.imes.framework.organ.core.context.OrganContextHolder; import com.cf.imes.framework.organ.core.context.OrganContextHolder;
import com.cf.imes.framework.security.core.LoginUser;
import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils; import com.cf.imes.framework.security.core.util.SecurityFrameworkUtils;
import com.cf.imes.module.system.api.permission.dto.DeptDataPermissionRespDTO; import com.cf.imes.module.system.api.permission.dto.DeptDataPermissionRespDTO;
import com.cf.imes.module.system.controller.admin.permission.vo.permission.PermissionAssignUserRoleReqVO; import com.cf.imes.module.system.controller.admin.permission.vo.permission.PermissionAssignUserRoleReqVO;
@@ -188,9 +189,9 @@ public class PermissionServiceImpl implements PermissionService {
// 角色菜单权限发生修改,通知刷新本地缓存 // 角色菜单权限发生修改,通知刷新本地缓存
if (CollectionUtil.isNotEmpty(createMenuIds) || CollectionUtil.isNotEmpty(deleteMenuIds)) { if (CollectionUtil.isNotEmpty(createMenuIds) || CollectionUtil.isNotEmpty(deleteMenuIds)) {
CompletableFuture.runAsync(() -> { CompletableFuture.runAsync(() -> {
redisTemplate.convertAndSend(RedisRefreshChannelTopicConstants.PREMISSION_REFRESH, ""); redisTemplate.convertAndSend(RedisRefreshChannelTopicConstants.PERMISSION_REFRESH, "");
}).exceptionally(e -> { }).exceptionally(e -> {
log.error("redis message发送失败, topic:{}, 异常:{}", RedisRefreshChannelTopicConstants.PREMISSION_REFRESH, e.getMessage()); log.error("redis message发送失败, topic:{}, 异常:{}", RedisRefreshChannelTopicConstants.PERMISSION_REFRESH, e.getMessage());
return null; return null;
}); });
} }
@@ -266,6 +267,12 @@ public class PermissionServiceImpl implements PermissionService {
@Override @Override
public Set<Long> getListRoleUsers(Long roleId, Long organId) { public Set<Long> getListRoleUsers(Long roleId, Long organId) {
// 超管查看时没有选择机构则查看本机构
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
assert loginUser != null;
if (loginUser.getIsSupAdmin() && organId == null) {
organId = loginUser.getOrganId();
}
List<UserRoleDO> userRoleDOS = userRoleMapper.selectList(new LambdaQueryWrapperX<UserRoleDO>() List<UserRoleDO> userRoleDOS = userRoleMapper.selectList(new LambdaQueryWrapperX<UserRoleDO>()
.eqIfPresent(UserRoleDO::getOrganId, organId) .eqIfPresent(UserRoleDO::getOrganId, organId)
.eq(UserRoleDO::getRoleId, roleId) .eq(UserRoleDO::getRoleId, roleId)
@@ -326,6 +333,16 @@ public class PermissionServiceImpl implements PermissionService {
if (!CollectionUtil.isEmpty(deleteMenuIds)) { if (!CollectionUtil.isEmpty(deleteMenuIds)) {
userRoleMapper.deleteListByUserIdAndRoleIdIds(userId, deleteMenuIds); userRoleMapper.deleteListByUserIdAndRoleIdIds(userId, deleteMenuIds);
} }
// 角色菜单权限发生修改,通知刷新本地缓存
if (CollectionUtil.isNotEmpty(createRoleIds) || CollectionUtil.isNotEmpty(deleteMenuIds)) {
CompletableFuture.runAsync(() -> {
redisTemplate.convertAndSend(RedisRefreshChannelTopicConstants.PERMISSION_REFRESH, "");
}).exceptionally(e -> {
log.error("redis message发送失败, topic:{}, 异常:{}", RedisRefreshChannelTopicConstants.PERMISSION_REFRESH, e.getMessage());
return null;
});
}
} }
@Override @Override