fix: 修复用户管理/角色管理编辑及状态变更问题 (#53)
修复用户管理修改任意信息,导致密码二次加密修改造成无法登录的问题 补充用户管理、权限管理状态变更后的逻辑: 1、禁用的角色不再允许分配给用户 2、已经分配给用户的角色不允许禁用 3、禁用用户后将清理该用户所有登录token
This commit is contained in:
parent
70ed667c16
commit
abf1e651e9
@ -51,6 +51,12 @@ public class LabelValueResp<T> implements Serializable {
|
|||||||
@Schema(description = "值", example = "1")
|
@Schema(description = "值", example = "1")
|
||||||
private T value;
|
private T value;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否禁用
|
||||||
|
*/
|
||||||
|
@Schema(description = "是否禁用", example = "false")
|
||||||
|
private Boolean disabled;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 颜色
|
* 颜色
|
||||||
*/
|
*/
|
||||||
@ -68,4 +74,10 @@ public class LabelValueResp<T> implements Serializable {
|
|||||||
this.value = value;
|
this.value = value;
|
||||||
this.color = color;
|
this.color = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LabelValueResp(String label, T value, Boolean disabled) {
|
||||||
|
this.label = label;
|
||||||
|
this.value = value;
|
||||||
|
this.disabled = disabled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,4 +55,11 @@ public interface OnlineUserService {
|
|||||||
* @param roleId 角色 ID
|
* @param roleId 角色 ID
|
||||||
*/
|
*/
|
||||||
void cleanByRoleId(Long roleId);
|
void cleanByRoleId(Long roleId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据用户 ID 清除登录
|
||||||
|
*
|
||||||
|
* @param userId 用户 ID
|
||||||
|
*/
|
||||||
|
void cleanByUserId(Long userId);
|
||||||
}
|
}
|
||||||
|
@ -92,6 +92,14 @@ public class OnlineUserServiceImpl implements OnlineUserService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cleanByUserId(Long userId) {
|
||||||
|
if (!StpUtil.isLogin(userId)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
StpUtil.logout(userId);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否符合查询条件
|
* 是否符合查询条件
|
||||||
*
|
*
|
||||||
|
@ -57,4 +57,12 @@ public interface UserRoleService {
|
|||||||
* @return 总记录数
|
* @return 总记录数
|
||||||
*/
|
*/
|
||||||
Long countByRoleIds(List<Long> roleIds);
|
Long countByRoleIds(List<Long> roleIds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据角色 ID 判断是否已被用户关联
|
||||||
|
*
|
||||||
|
* @param roleId 角色 ID
|
||||||
|
* @return 是否已关联
|
||||||
|
*/
|
||||||
|
boolean isRoleIdExists(Long roleId);
|
||||||
}
|
}
|
@ -84,6 +84,8 @@ public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleDO, RoleRes
|
|||||||
CheckUtils.throwIf(this.isNameExists(name, id), "修改失败,[{}] 已存在", name);
|
CheckUtils.throwIf(this.isNameExists(name, id), "修改失败,[{}] 已存在", name);
|
||||||
RoleDO oldRole = super.getById(id);
|
RoleDO oldRole = super.getById(id);
|
||||||
CheckUtils.throwIfNotEqual(req.getCode(), oldRole.getCode(), "角色编码不允许修改", oldRole.getName());
|
CheckUtils.throwIfNotEqual(req.getCode(), oldRole.getCode(), "角色编码不允许修改", oldRole.getName());
|
||||||
|
CheckUtils.throwIf(DisEnableStatusEnum.DISABLE.equals(req.getStatus()) && userRoleService
|
||||||
|
.isRoleIdExists(id), "所选角色存在用户关联,请解除关联后重试");
|
||||||
DataScopeEnum oldDataScope = oldRole.getDataScope();
|
DataScopeEnum oldDataScope = oldRole.getDataScope();
|
||||||
if (Boolean.TRUE.equals(oldRole.getIsSystem())) {
|
if (Boolean.TRUE.equals(oldRole.getIsSystem())) {
|
||||||
CheckUtils.throwIfEqual(DisEnableStatusEnum.DISABLE, req.getStatus(), "[{}] 是系统内置角色,不允许禁用", oldRole
|
CheckUtils.throwIfEqual(DisEnableStatusEnum.DISABLE, req.getStatus(), "[{}] 是系统内置角色,不允许禁用", oldRole
|
||||||
@ -141,7 +143,9 @@ public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleDO, RoleRes
|
|||||||
if (CollUtil.isEmpty(list)) {
|
if (CollUtil.isEmpty(list)) {
|
||||||
return new ArrayList<>(0);
|
return new ArrayList<>(0);
|
||||||
}
|
}
|
||||||
return list.stream().map(r -> new LabelValueResp<>(r.getName(), r.getId())).toList();
|
return list.stream()
|
||||||
|
.map(r -> new LabelValueResp<>(r.getName(), r.getId(), DisEnableStatusEnum.DISABLE.equals(r.getStatus())))
|
||||||
|
.toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -78,4 +78,9 @@ public class UserRoleServiceImpl implements UserRoleService {
|
|||||||
public Long countByRoleIds(List<Long> roleIds) {
|
public Long countByRoleIds(List<Long> roleIds) {
|
||||||
return userRoleMapper.lambdaQuery().in(UserRoleDO::getRoleId, roleIds).count();
|
return userRoleMapper.lambdaQuery().in(UserRoleDO::getRoleId, roleIds).count();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isRoleIdExists(Long roleId) {
|
||||||
|
return userRoleMapper.lambdaQuery().eq(UserRoleDO::getRoleId, roleId).exists();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package top.continew.admin.system.service.impl;
|
package top.continew.admin.system.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import cn.hutool.core.io.file.FileNameUtil;
|
import cn.hutool.core.io.file.FileNameUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
@ -32,6 +33,7 @@ import org.springframework.security.crypto.password.PasswordEncoder;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
import top.continew.admin.auth.service.OnlineUserService;
|
||||||
import top.continew.admin.common.constant.CacheConstants;
|
import top.continew.admin.common.constant.CacheConstants;
|
||||||
import top.continew.admin.common.enums.DisEnableStatusEnum;
|
import top.continew.admin.common.enums.DisEnableStatusEnum;
|
||||||
import top.continew.admin.common.util.helper.LoginHelper;
|
import top.continew.admin.common.util.helper.LoginHelper;
|
||||||
@ -68,6 +70,7 @@ import java.util.Optional;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserResp, UserDetailResp, UserQuery, UserReq> implements UserService, CommonUserService {
|
public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserResp, UserDetailResp, UserQuery, UserReq> implements UserService, CommonUserService {
|
||||||
|
|
||||||
|
private final OnlineUserService onlineUserService;
|
||||||
private final RoleService roleService;
|
private final RoleService roleService;
|
||||||
private final UserRoleService userRoleService;
|
private final UserRoleService userRoleService;
|
||||||
private final FileService fileService;
|
private final FileService fileService;
|
||||||
@ -125,9 +128,15 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserRes
|
|||||||
CheckUtils.throwIfNotEmpty(disjunctionRoleIds, "[{}] 是系统内置用户,不允许变更角色", oldUser.getNickname());
|
CheckUtils.throwIfNotEmpty(disjunctionRoleIds, "[{}] 是系统内置用户,不允许变更角色", oldUser.getNickname());
|
||||||
}
|
}
|
||||||
// 更新信息
|
// 更新信息
|
||||||
super.update(req, id);
|
UserDO newUser = BeanUtil.toBean(req, UserDO.class);
|
||||||
|
newUser.setId(id);
|
||||||
|
baseMapper.updateById(newUser);
|
||||||
// 保存用户和角色关联
|
// 保存用户和角色关联
|
||||||
userRoleService.add(req.getRoleIds(), id);
|
boolean isSaveUserRoleSuccess = userRoleService.add(req.getRoleIds(), id);
|
||||||
|
// 如果功能权限或数据权限有变更,则清除关联的在线用户(重新登录以获取最新角色权限)
|
||||||
|
if (DisEnableStatusEnum.DISABLE.equals(newStatus) || isSaveUserRoleSuccess) {
|
||||||
|
onlineUserService.cleanByUserId(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user