【7.6.0】【sys】删除、禁用、修改角色判断不能修改超级管理员

pull/57/head
fengshuonan 2023-06-28 15:46:35 +08:00
parent 1705105269
commit c9a43ff7b0
7 changed files with 152 additions and 153 deletions

View File

@ -48,9 +48,9 @@ public interface SysConstants {
String DEFAULT_LOGIN_PASSWORD = "Aa123456!";
/**
*
*
*/
String SUPER_ADMIN_ROLE_CODE = "superAdmin";
String BACKEND_ADMIN_ROLE_CODE = "backendAdmin";
/**
*

View File

@ -1,145 +0,0 @@
package cn.stylefeng.roses.kernel.sys.modular.user.biz;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.file.api.FileInfoApi;
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
import cn.stylefeng.roses.kernel.sys.api.SysUserServiceApi;
import cn.stylefeng.roses.kernel.sys.api.pojo.user.SimpleUserDTO;
import cn.stylefeng.roses.kernel.sys.api.pojo.user.UserValidateDTO;
import cn.stylefeng.roses.kernel.sys.modular.user.entity.SysUser;
import cn.stylefeng.roses.kernel.sys.modular.user.enums.SysUserExceptionEnum;
import cn.stylefeng.roses.kernel.sys.modular.user.service.SysUserService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
*
*
* @author fengshuonan
* @since 2023/6/11 21:44
*/
@Service
public class UserIntegrationService implements SysUserServiceApi {
@Resource
private SysUserService sysUserService;
@Resource
private FileInfoApi fileInfoApi;
@Override
public SimpleUserDTO getUserInfoByUserId(Long userId) {
if (ObjectUtil.isEmpty(userId)) {
return null;
}
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysUserLambdaQueryWrapper.eq(SysUser::getUserId, userId);
sysUserLambdaQueryWrapper.select(SysUser::getRealName, SysUser::getAvatar);
SysUser sysUser = this.sysUserService.getOne(sysUserLambdaQueryWrapper);
if (sysUser == null) {
return null;
}
SimpleUserDTO simpleUserDTO = new SimpleUserDTO();
simpleUserDTO.setUserId(userId);
simpleUserDTO.setRealName(sysUser.getRealName());
// 获取头像文件id信息转化为头像URL
Long avatarFileId = sysUser.getAvatar();
if (avatarFileId == null) {
return null;
}
// 获取头像的访问地址
String fileAuthUrl = fileInfoApi.getFileAuthUrl(avatarFileId);
simpleUserDTO.setAvatarUrl(fileAuthUrl);
return simpleUserDTO;
}
@Override
public String getUserRealName(Long userId) {
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysUserLambdaQueryWrapper.select(SysUser::getRealName);
sysUserLambdaQueryWrapper.eq(SysUser::getUserId, userId);
SysUser sysUser = this.sysUserService.getOne(sysUserLambdaQueryWrapper);
if (sysUser == null) {
return "";
}
return sysUser.getRealName();
}
@Override
public UserValidateDTO getUserLoginValidateDTO(String account) {
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysUserLambdaQueryWrapper.eq(SysUser::getAccount, account);
sysUserLambdaQueryWrapper.select(SysUser::getPassword, SysUser::getPasswordSalt, SysUser::getStatusFlag, SysUser::getUserId);
SysUser sysUserServiceOne = this.sysUserService.getOne(sysUserLambdaQueryWrapper, false);
if (sysUserServiceOne == null) {
throw new ServiceException(SysUserExceptionEnum.ACCOUNT_NOT_EXIST);
}
return new UserValidateDTO(sysUserServiceOne.getUserId(), sysUserServiceOne.getPassword(), sysUserServiceOne.getPasswordSalt(),
sysUserServiceOne.getStatusFlag());
}
@Override
public void updateUserLoginInfo(Long userId, String ip) {
if (ObjectUtil.isEmpty(userId) || ObjectUtil.isEmpty(ip)) {
return;
}
LambdaUpdateWrapper<SysUser> sysUserLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
sysUserLambdaUpdateWrapper.eq(SysUser::getUserId, userId);
sysUserLambdaUpdateWrapper.set(SysUser::getLastLoginTime, new Date());
sysUserLambdaUpdateWrapper.set(SysUser::getLastLoginIp, ip);
this.sysUserService.update(sysUserLambdaUpdateWrapper);
}
@Override
public boolean getUserSuperAdminFlag(Long userId) {
if (ObjectUtil.isEmpty(userId)) {
return false;
}
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysUserLambdaQueryWrapper.eq(SysUser::getUserId, userId);
sysUserLambdaQueryWrapper.select(SysUser::getSuperAdminFlag);
SysUser result = this.sysUserService.getOne(sysUserLambdaQueryWrapper, false);
if (result == null) {
return false;
}
return YesOrNotEnum.Y.getCode().equals(result.getSuperAdminFlag());
}
@Override
public List<Long> queryAllUserIdList() {
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysUserLambdaQueryWrapper.select(SysUser::getUserId);
List<SysUser> list = this.sysUserService.list(sysUserLambdaQueryWrapper);
return list.stream().map(SysUser::getUserId).collect(Collectors.toList());
}
@Override
public Boolean userExist(Long userId) {
LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysUser::getUserId, userId);
long count = this.sysUserService.count(wrapper);
return count > 0;
}
}

View File

@ -38,7 +38,17 @@ public enum SysUserExceptionEnum implements AbstractExceptionEnum {
/**
*
*/
USER_PWD_REPEAT(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10005", "新密码与原密码相同,请更换新密码");
USER_PWD_REPEAT(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10005", "新密码与原密码相同,请更换新密码"),
/**
*
*/
CANT_UPDATE_STATUS(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10006", "不能修改超级管理员状态"),
/**
*
*/
CANT_CHANGE_ADMIN_ROLE(RuleConstants.USER_OPERATION_ERROR_TYPE_CODE + "10007", "不能修改超级管理员的角色");
/**
*

View File

@ -1,6 +1,7 @@
package cn.stylefeng.roses.kernel.sys.modular.user.service;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.sys.api.SysUserServiceApi;
import cn.stylefeng.roses.kernel.sys.modular.user.entity.SysUser;
import cn.stylefeng.roses.kernel.sys.modular.user.pojo.request.SysUserRequest;
import cn.stylefeng.roses.kernel.sys.modular.user.pojo.response.PersonalInfo;
@ -14,7 +15,7 @@ import java.util.List;
* @author fengshuonan
* @date 2023/06/10 21:26
*/
public interface SysUserService extends IService<SysUser> {
public interface SysUserService extends IService<SysUser>, SysUserServiceApi {
/**
*

View File

@ -10,10 +10,12 @@ import cn.stylefeng.roses.kernel.sys.api.SysRoleServiceApi;
import cn.stylefeng.roses.kernel.sys.api.callback.RemoveRoleCallbackApi;
import cn.stylefeng.roses.kernel.sys.api.callback.RemoveUserCallbackApi;
import cn.stylefeng.roses.kernel.sys.modular.user.entity.SysUserRole;
import cn.stylefeng.roses.kernel.sys.modular.user.enums.SysUserExceptionEnum;
import cn.stylefeng.roses.kernel.sys.modular.user.enums.SysUserRoleExceptionEnum;
import cn.stylefeng.roses.kernel.sys.modular.user.mapper.SysUserRoleMapper;
import cn.stylefeng.roses.kernel.sys.modular.user.pojo.request.SysUserRoleRequest;
import cn.stylefeng.roses.kernel.sys.modular.user.service.SysUserRoleService;
import cn.stylefeng.roses.kernel.sys.modular.user.service.SysUserService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -39,6 +41,9 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
@Resource
private SysRoleServiceApi sysRoleServiceApi;
@Resource
private SysUserService sysUserService;
@Override
public void add(SysUserRoleRequest sysUserRoleRequest) {
SysUserRole sysUserRole = new SysUserRole();
@ -75,6 +80,12 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
@Transactional(rollbackFor = Exception.class)
public void bindRoles(SysUserRoleRequest sysUserRoleRequest) {
// 不能修改超级管理员用户的角色
boolean userSuperAdminFlag = sysUserService.getUserSuperAdminFlag(sysUserRoleRequest.getUserId());
if (userSuperAdminFlag) {
throw new ServiceException(SysUserExceptionEnum.CANT_CHANGE_ADMIN_ROLE);
}
// 清空已有的用户角色绑定
LambdaQueryWrapper<SysUserRole> wrapper = this.createWrapper(sysUserRoleRequest);
this.remove(wrapper);

View File

@ -12,6 +12,7 @@ import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
import cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.file.api.FileInfoApi;
import cn.stylefeng.roses.kernel.file.api.constants.FileConstants;
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
@ -19,7 +20,9 @@ import cn.stylefeng.roses.kernel.sys.api.callback.RemoveUserCallbackApi;
import cn.stylefeng.roses.kernel.sys.api.enums.user.UserStatusEnum;
import cn.stylefeng.roses.kernel.sys.api.exception.enums.UserExceptionEnum;
import cn.stylefeng.roses.kernel.sys.api.expander.SysConfigExpander;
import cn.stylefeng.roses.kernel.sys.api.pojo.user.SimpleUserDTO;
import cn.stylefeng.roses.kernel.sys.api.pojo.user.UserOrgDTO;
import cn.stylefeng.roses.kernel.sys.api.pojo.user.UserValidateDTO;
import cn.stylefeng.roses.kernel.sys.modular.user.entity.SysUser;
import cn.stylefeng.roses.kernel.sys.modular.user.enums.SysUserExceptionEnum;
import cn.stylefeng.roses.kernel.sys.modular.user.factory.SysUserCreateFactory;
@ -37,9 +40,11 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
*
@ -59,6 +64,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
@Resource
private SysUserRoleService sysUserRoleService;
@Resource
private FileInfoApi fileInfoApi;
@Override
@Transactional(rollbackFor = Exception.class)
public void add(SysUserRequest sysUserRequest) {
@ -180,6 +188,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
@Override
public void updateStatus(SysUserRequest sysUserRequest) {
// 如果是将用户禁用,检测判断不能禁用超级管理员用户
boolean userSuperAdminFlag = this.getUserSuperAdminFlag(sysUserRequest.getUserId());
if (userSuperAdminFlag) {
throw new ServiceException(SysUserExceptionEnum.CANT_UPDATE_STATUS);
}
// 校验状态传值是否正确
Integer statusFlag = sysUserRequest.getStatusFlag();
UserStatusEnum.validateUserStatus(statusFlag);
@ -290,6 +304,114 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
this.update(wrapper);
}
@Override
public SimpleUserDTO getUserInfoByUserId(Long userId) {
if (ObjectUtil.isEmpty(userId)) {
return null;
}
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysUserLambdaQueryWrapper.eq(SysUser::getUserId, userId);
sysUserLambdaQueryWrapper.select(SysUser::getRealName, SysUser::getAvatar);
SysUser sysUser = this.getOne(sysUserLambdaQueryWrapper);
if (sysUser == null) {
return null;
}
SimpleUserDTO simpleUserDTO = new SimpleUserDTO();
simpleUserDTO.setUserId(userId);
simpleUserDTO.setRealName(sysUser.getRealName());
// 获取头像文件id信息转化为头像URL
Long avatarFileId = sysUser.getAvatar();
if (avatarFileId == null) {
return null;
}
// 获取头像的访问地址
String fileAuthUrl = fileInfoApi.getFileAuthUrl(avatarFileId);
simpleUserDTO.setAvatarUrl(fileAuthUrl);
return simpleUserDTO;
}
@Override
public String getUserRealName(Long userId) {
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysUserLambdaQueryWrapper.select(SysUser::getRealName);
sysUserLambdaQueryWrapper.eq(SysUser::getUserId, userId);
SysUser sysUser = this.getOne(sysUserLambdaQueryWrapper);
if (sysUser == null) {
return "";
}
return sysUser.getRealName();
}
@Override
public UserValidateDTO getUserLoginValidateDTO(String account) {
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysUserLambdaQueryWrapper.eq(SysUser::getAccount, account);
sysUserLambdaQueryWrapper.select(SysUser::getPassword, SysUser::getPasswordSalt, SysUser::getStatusFlag, SysUser::getUserId);
SysUser sysUserServiceOne = this.getOne(sysUserLambdaQueryWrapper, false);
if (sysUserServiceOne == null) {
throw new ServiceException(SysUserExceptionEnum.ACCOUNT_NOT_EXIST);
}
return new UserValidateDTO(sysUserServiceOne.getUserId(), sysUserServiceOne.getPassword(), sysUserServiceOne.getPasswordSalt(),
sysUserServiceOne.getStatusFlag());
}
@Override
public void updateUserLoginInfo(Long userId, String ip) {
if (ObjectUtil.isEmpty(userId) || ObjectUtil.isEmpty(ip)) {
return;
}
LambdaUpdateWrapper<SysUser> sysUserLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
sysUserLambdaUpdateWrapper.eq(SysUser::getUserId, userId);
sysUserLambdaUpdateWrapper.set(SysUser::getLastLoginTime, new Date());
sysUserLambdaUpdateWrapper.set(SysUser::getLastLoginIp, ip);
this.update(sysUserLambdaUpdateWrapper);
}
@Override
public boolean getUserSuperAdminFlag(Long userId) {
if (ObjectUtil.isEmpty(userId)) {
return false;
}
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysUserLambdaQueryWrapper.eq(SysUser::getUserId, userId);
sysUserLambdaQueryWrapper.select(SysUser::getSuperAdminFlag);
SysUser result = this.getOne(sysUserLambdaQueryWrapper, false);
if (result == null) {
return false;
}
return YesOrNotEnum.Y.getCode().equals(result.getSuperAdminFlag());
}
@Override
public List<Long> queryAllUserIdList() {
LambdaQueryWrapper<SysUser> sysUserLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysUserLambdaQueryWrapper.select(SysUser::getUserId);
List<SysUser> list = this.list(sysUserLambdaQueryWrapper);
return list.stream().map(SysUser::getUserId).collect(Collectors.toList());
}
@Override
public Boolean userExist(Long userId) {
LambdaQueryWrapper<SysUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysUser::getUserId, userId);
long count = this.count(wrapper);
return count > 0;
}
/**
*
*

View File

@ -65,7 +65,7 @@ public class InitAdminService {
private SysRoleMenuOptionsService sysRoleMenuOptionsService;
/**
*
*
*
* @author fengshuonan
* @since 2020/12/17 21:57
@ -73,9 +73,9 @@ public class InitAdminService {
@Transactional(rollbackFor = Exception.class)
public void initSuperAdmin() {
// 找到超级管理员的角色id
// 找到后台管理员角色id
LambdaQueryWrapper<SysRole> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysRole::getRoleCode, SysConstants.SUPER_ADMIN_ROLE_CODE);
queryWrapper.eq(SysRole::getRoleCode, SysConstants.BACKEND_ADMIN_ROLE_CODE);
queryWrapper.select(SysRole::getRoleId);
SysRole superAdminRole = sysRoleService.getOne(queryWrapper);
@ -83,7 +83,7 @@ public class InitAdminService {
List<SysMenu> totalMenuList = sysMenuService.getTotalMenuList();
List<SysMenuOptions> totalMenuOptionsList = sysMenuOptionsService.getTotalMenuOptionsList();
// 超级管理员绑定所有的菜单和菜单功能
// 后台管理员绑定所有的菜单和菜单功能
sysRoleMenuService.bindRoleMenus(superAdminRole.getRoleId(), totalMenuList);
sysRoleMenuOptionsService.bindRoleMenuOptions(superAdminRole.getRoleId(), totalMenuOptionsList);
}