feat:【system】用户被禁用时,删除其相关 token,关联 issue:https://gitee.com/yudaocode/yudao-ui-admin-vue3/issues/IB2EK6
This commit is contained in:
parent
351ae4494c
commit
62e4af4016
@ -32,4 +32,9 @@ public interface OAuth2AccessTokenMapper extends BaseMapperX<OAuth2AccessTokenDO
|
|||||||
.orderByDesc(OAuth2AccessTokenDO::getId));
|
.orderByDesc(OAuth2AccessTokenDO::getId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default List<OAuth2AccessTokenDO> selectListByUserIdAndUserType(Long userId, Integer userType) {
|
||||||
|
return selectList(OAuth2AccessTokenDO::getUserId, userId,
|
||||||
|
OAuth2AccessTokenDO::getUserType, userType);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -69,6 +69,17 @@ public interface OAuth2TokenService {
|
|||||||
*/
|
*/
|
||||||
OAuth2AccessTokenDO removeAccessToken(String accessToken);
|
OAuth2AccessTokenDO removeAccessToken(String accessToken);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 移除访问令牌
|
||||||
|
* 注意:该流程中,会移除相关的刷新令牌
|
||||||
|
*
|
||||||
|
* 参考 DefaultTokenServices 的 revokeToken 方法
|
||||||
|
*
|
||||||
|
* @param userId 用户编号
|
||||||
|
* @param userType 用户类型
|
||||||
|
*/
|
||||||
|
void removeAccessToken(Long userId, Integer userType);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得访问令牌分页
|
* 获得访问令牌分页
|
||||||
*
|
*
|
||||||
|
|||||||
@ -153,6 +153,21 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
|
|||||||
return accessTokenDO;
|
return accessTokenDO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeAccessToken(Long userId, Integer userType) {
|
||||||
|
List<OAuth2AccessTokenDO> accessTokens = oauth2AccessTokenMapper.selectListByUserIdAndUserType(userId, userType);
|
||||||
|
if (CollUtil.isEmpty(accessTokens)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
accessTokens.forEach(accessToken -> {
|
||||||
|
// 删除访问令牌
|
||||||
|
oauth2AccessTokenMapper.deleteById(accessToken.getId());
|
||||||
|
oauth2AccessTokenRedisDAO.delete(accessToken.getAccessToken());
|
||||||
|
// 删除刷新令牌
|
||||||
|
oauth2RefreshTokenMapper.deleteByRefreshToken(accessToken.getRefreshToken());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageResult<OAuth2AccessTokenDO> getAccessTokenPage(OAuth2AccessTokenPageReqVO reqVO) {
|
public PageResult<OAuth2AccessTokenDO> getAccessTokenPage(OAuth2AccessTokenPageReqVO reqVO) {
|
||||||
return oauth2AccessTokenMapper.selectPage(reqVO);
|
return oauth2AccessTokenMapper.selectPage(reqVO);
|
||||||
|
|||||||
@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollectionUtil;
|
|||||||
import cn.hutool.core.util.ObjUtil;
|
import cn.hutool.core.util.ObjUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||||
|
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
|
||||||
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
|
||||||
@ -26,6 +27,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.dept.UserPostMapper;
|
|||||||
import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
|
import cn.iocoder.yudao.module.system.dal.mysql.user.AdminUserMapper;
|
||||||
import cn.iocoder.yudao.module.system.service.dept.DeptService;
|
import cn.iocoder.yudao.module.system.service.dept.DeptService;
|
||||||
import cn.iocoder.yudao.module.system.service.dept.PostService;
|
import cn.iocoder.yudao.module.system.service.dept.PostService;
|
||||||
|
import cn.iocoder.yudao.module.system.service.oauth2.OAuth2TokenService;
|
||||||
import cn.iocoder.yudao.module.system.service.permission.PermissionService;
|
import cn.iocoder.yudao.module.system.service.permission.PermissionService;
|
||||||
import cn.iocoder.yudao.module.system.service.tenant.TenantService;
|
import cn.iocoder.yudao.module.system.service.tenant.TenantService;
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
@ -75,6 +77,9 @@ public class AdminUserServiceImpl implements AdminUserService {
|
|||||||
@Resource
|
@Resource
|
||||||
@Lazy // 延迟,避免循环依赖报错
|
@Lazy // 延迟,避免循环依赖报错
|
||||||
private TenantService tenantService;
|
private TenantService tenantService;
|
||||||
|
@Resource
|
||||||
|
@Lazy // 懒加载,避免循环依赖
|
||||||
|
private OAuth2TokenService oauth2TokenService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private UserPostMapper userPostMapper;
|
private UserPostMapper userPostMapper;
|
||||||
@ -227,6 +232,11 @@ public class AdminUserServiceImpl implements AdminUserService {
|
|||||||
updateObj.setId(id);
|
updateObj.setId(id);
|
||||||
updateObj.setStatus(status);
|
updateObj.setStatus(status);
|
||||||
userMapper.updateById(updateObj);
|
userMapper.updateById(updateObj);
|
||||||
|
|
||||||
|
// 如果是禁用用户,则删除其 Token 信息
|
||||||
|
if (CommonStatusEnum.isDisable(status)) {
|
||||||
|
oauth2TokenService.removeAccessToken(id, UserTypeEnum.ADMIN.getValue());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user