【SysUserDataScope】业务优化

pull/3/head
chenjinlong 2021-02-03 16:47:49 +08:00
parent 7871ab637f
commit da18b5eec6
6 changed files with 323 additions and 112 deletions

View File

@ -8,8 +8,6 @@ import cn.stylefeng.roses.kernel.resource.api.annotation.PostResource;
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData;
import cn.stylefeng.roses.kernel.system.exception.SystemModularException;
import cn.stylefeng.roses.kernel.system.modular.user.entity.SysUserRole;
import cn.stylefeng.roses.kernel.system.modular.user.service.SysUserRoleService;
import cn.stylefeng.roses.kernel.system.modular.user.service.SysUserService;
import cn.stylefeng.roses.kernel.system.pojo.user.request.SysUserRequest;
@ -19,7 +17,6 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
/**
@ -202,12 +199,7 @@ public class SysUserController {
@GetResource(name = "系统用户_获取用户的角色列表", path = "/sysUser/getUserRoles")
public ResponseData ownRole(@Validated(SysUserRequest.detail.class) SysUserRequest sysUserRequest) {
Long userId = sysUserRequest.getUserId();
try {
List<SysUserRole> userRoles = sysUserRoleService.getUserRoles(userId);
return new SuccessResponseData(userRoles);
} catch (SystemModularException e) {
return new SuccessResponseData(new ArrayList<>());
}
return new SuccessResponseData(sysUserRoleService.findListByUserId(userId));
}
/**

View File

@ -1,6 +1,7 @@
package cn.stylefeng.roses.kernel.system.modular.user.service;
import cn.stylefeng.roses.kernel.system.modular.user.entity.SysUserDataScope;
import cn.stylefeng.roses.kernel.system.pojo.UserDataScopeRequest;
import cn.stylefeng.roses.kernel.system.pojo.user.request.SysUserRequest;
import com.baomidou.mybatisplus.extension.service.IService;
@ -14,14 +15,51 @@ import java.util.List;
*/
public interface SysUserDataScopeService extends IService<SysUserDataScope> {
/**
* id
*
*
* @param sysUserRequest
* @author fengshuonan
* @date 2020/11/21 14:49
* @param userDataScopeRequest
* @author chenjinlong
* @date 2021/1/26 12:52
*/
void grantData(SysUserRequest sysUserRequest);
void add(UserDataScopeRequest userDataScopeRequest);
/**
*
*
* @param userDataScopeRequest
* @author chenjinlong
* @date 2021/1/26 12:52
*/
void del(UserDataScopeRequest userDataScopeRequest);
/**
* id
*
* @param userId id
* @author chenjinlong
* @date 2021/1/26 12:52
*/
void delByUserId(Long userId);
/**
*
*
* @param userDataScopeRequest
* @author chenjinlong
* @date 2021/1/26 12:52
*/
void edit(UserDataScopeRequest userDataScopeRequest);
/**
* --id
*
* @param userDataScopeRequest
* @author chenjinlong
* @date 2021/1/26 12:52
*/
SysUserDataScope detail(UserDataScopeRequest userDataScopeRequest);
/**
* id
@ -31,14 +69,23 @@ public interface SysUserDataScopeService extends IService<SysUserDataScope> {
* @author luojie
* @date 2020/11/6 15:01
*/
List<Long> getUserDataScopeIdList(Long uerId);
List<Long> findOrgIdsByUserId(Long uerId);
/**
* id-
* --
*
* @param userId id
* @author luojie
* @date 2020/11/6 15:01
* @param userDataScopeRequest
* @author chenjinlong
* @date 2021/1/26 12:52
*/
void deleteUserDataScopeListByUserId(Long userId);
List<SysUserDataScope> findList(UserDataScopeRequest userDataScopeRequest);
/**
*
*
* @author chenjinlong
* @date 2021/2/3 15:49
*/
void assignData(SysUserRequest sysUserRequest);
}

View File

@ -1,6 +1,7 @@
package cn.stylefeng.roses.kernel.system.modular.user.service;
import cn.stylefeng.roses.kernel.system.modular.user.entity.SysUserRole;
import cn.stylefeng.roses.kernel.system.pojo.UserRoleRequest;
import cn.stylefeng.roses.kernel.system.pojo.user.request.SysUserRequest;
import com.baomidou.mybatisplus.extension.service.IService;
@ -9,46 +10,94 @@ import java.util.List;
/**
* service
*
* @author luojie
* @date 2020/11/6 10:28
* @author chenjinlong
* @date 2021/2/3 15:23
*/
public interface SysUserRoleService extends IService<SysUserRole> {
/**
*
*
* @param userId id
* @author fengshuonan
* @date 2020/12/22 16:52
*/
List<SysUserRole> getUserRoles(Long userId);
/**
* id
*
*
* @param userId id
* @return id
* @param userRoleRequest
* @author chenjinlong
* @date 2021/1/12 19:42
* @date 2021/1/26 12:52
*/
List<Long> getUserRoleIds(Long userId);
void add(UserRoleRequest userRoleRequest);
/**
*
*
*
* @param sysUserRequest id
* @author fengshuonan
* @date 2020/11/21 14:44
* @param userRoleRequest
* @author chenjinlong
* @date 2021/1/26 12:52
*/
void grantRole(SysUserRequest sysUserRequest);
void del(UserRoleRequest userRoleRequest);
/**
* id-
* id
*
* @param userId id
* @author luojie
* @date 2020/11/6 15:03
* @author chenjinlong
* @date 2021/1/26 12:52
*/
void deleteUserRoleListByUserId(Long userId);
void delByUserId(Long userId);
/**
*
*
* @param userRoleRequest
* @author chenjinlong
* @date 2021/1/26 12:52
*/
void edit(UserRoleRequest userRoleRequest);
/**
* -
*
* @param userRoleRequest
* @author chenjinlong
* @date 2021/1/26 12:52
*/
SysUserRole detail(UserRoleRequest userRoleRequest);
/**
* -
*
* @param userRoleRequest
* @author chenjinlong
* @date 2021/1/26 12:52
*/
List<SysUserRole> findList(UserRoleRequest userRoleRequest);
/**
* userId
*
* @param userId id
* @return
* @author chenjinlong
* @date 2021/2/3 15:06
*/
List<SysUserRole> findListByUserId(Long userId);
/**
* userId
*
* @param userId id
* @return
* @author chenjinlong
* @date 2021/2/3 15:09
*/
List<Long> findRoleIdsByUserId(Long userId);
/**
*
*
* @param sysUserRequest
* @return
* @author chenjinlong
* @date 2021/2/3 15:16
*/
void assignRoles(SysUserRequest sysUserRequest);
}

View File

@ -1,14 +1,18 @@
package cn.stylefeng.roses.kernel.system.modular.user.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.system.modular.user.entity.SysUserDataScope;
import cn.stylefeng.roses.kernel.system.modular.user.mapper.SysUserDataScopeMapper;
import cn.stylefeng.roses.kernel.system.pojo.user.request.SysUserRequest;
import cn.stylefeng.roses.kernel.system.modular.user.service.SysUserDataScopeService;
import cn.stylefeng.roses.kernel.system.pojo.UserDataScopeRequest;
import cn.stylefeng.roses.kernel.system.pojo.user.request.SysUserRequest;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@ -22,44 +26,107 @@ import java.util.stream.Collectors;
public class SysUserDataScopeServiceImpl extends ServiceImpl<SysUserDataScopeMapper, SysUserDataScope> implements SysUserDataScopeService {
@Override
public void grantData(SysUserRequest sysUserRequest) {
@Transactional(rollbackFor = Exception.class)
public void assignData(SysUserRequest sysUserRequest) {
// 获取用户id
Long userId = sysUserRequest.getUserId();
// 删除该用户的数据范围集合sys_user_data_scope表中
LambdaQueryWrapper<SysUserDataScope> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysUserDataScope::getUserId, userId);
this.remove(queryWrapper);
// 删除用户所有授权范围
this.delByUserId(userId);
List<Long> orgIdList = sysUserRequest.getGrantOrgIdList();
List<Long> orgIds = sysUserRequest.getGrantOrgIdList();
// 授权组织机构数据范围给用户
ArrayList<SysUserDataScope> sysUserDataScopes = new ArrayList<>();
for (Long orgId : orgIdList) {
List<SysUserDataScope> sysUserDataScopeList = CollUtil.newArrayList();
// 批量添加数据范围
orgIds.forEach(orgId -> {
SysUserDataScope sysUserDataScope = new SysUserDataScope();
sysUserDataScope.setUserId(userId);
sysUserDataScope.setOrgId(orgId);
sysUserDataScopes.add(sysUserDataScope);
}
this.saveBatch(sysUserDataScopes);
sysUserDataScopeList.add(sysUserDataScope);
});
this.saveBatch(sysUserDataScopeList);
}
@Override
public void add(UserDataScopeRequest userDataScopeRequest) {
SysUserDataScope sysUserDataScope = new SysUserDataScope();
BeanUtil.copyProperties(userDataScopeRequest, sysUserDataScope);
this.save(sysUserDataScope);
}
@Override
public List<Long> getUserDataScopeIdList(Long uerId) {
LambdaQueryWrapper<SysUserDataScope> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysUserDataScope::getUserId, uerId);
queryWrapper.select(SysUserDataScope::getOrgId);
List<SysUserDataScope> list = this.list(queryWrapper);
return list.stream().map(SysUserDataScope::getOrgId).collect(Collectors.toList());
public void del(UserDataScopeRequest userDataScopeRequest) {
SysUserDataScope sysUserDataScope = this.querySysUserRoleById(userDataScopeRequest);
this.removeById(sysUserDataScope.getUserDataScopeId());
}
@Override
public void deleteUserDataScopeListByUserId(Long userId) {
LambdaQueryWrapper<SysUserDataScope> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysUserDataScope::getUserId, userId);
public void delByUserId(Long userId) {
UserDataScopeRequest userDataScopeRequest = new UserDataScopeRequest();
userDataScopeRequest.setUserId(userId);
LambdaQueryWrapper<SysUserDataScope> queryWrapper = this.createQueryWrapper(userDataScopeRequest);
this.remove(queryWrapper);
}
@Override
public void edit(UserDataScopeRequest userDataScopeRequest) {
SysUserDataScope sysUserDataScope = this.querySysUserRoleById(userDataScopeRequest);
BeanUtil.copyProperties(sysUserDataScope, userDataScopeRequest);
this.updateById(sysUserDataScope);
}
@Override
public SysUserDataScope detail(UserDataScopeRequest userDataScopeRequest) {
LambdaQueryWrapper<SysUserDataScope> queryWrapper = this.createQueryWrapper(userDataScopeRequest);
return this.getOne(queryWrapper, false);
}
@Override
public List<Long> findOrgIdsByUserId(Long uerId) {
UserDataScopeRequest userDataScopeRequest = new UserDataScopeRequest();
userDataScopeRequest.setUserId(uerId);
List<SysUserDataScope> sysUserDataScopeList = this.findList(userDataScopeRequest);
return sysUserDataScopeList.stream().map(SysUserDataScope::getOrgId).collect(Collectors.toList());
}
@Override
public List<SysUserDataScope> findList(UserDataScopeRequest userDataScopeRequest) {
LambdaQueryWrapper<SysUserDataScope> queryWrapper = this.createQueryWrapper(userDataScopeRequest);
return this.list(queryWrapper);
}
/**
*
*
* @param userDataScopeRequest dto
* @author chenjinlong
* @date 2021/2/3 15:02
*/
private SysUserDataScope querySysUserRoleById(UserDataScopeRequest userDataScopeRequest) {
return this.getById(userDataScopeRequest.getUserDataScopeId());
}
/**
* QueryWrapper
*
* @param userDataScopeRequest dto
* @author chenjinlong
* @date 2021/2/3 14:54
*/
private LambdaQueryWrapper<SysUserDataScope> createQueryWrapper(UserDataScopeRequest userDataScopeRequest) {
LambdaQueryWrapper<SysUserDataScope> queryWrapper = new LambdaQueryWrapper<>();
// SQL拼接
queryWrapper.eq(ObjectUtil.isNotNull(userDataScopeRequest.getOrgId()), SysUserDataScope::getOrgId, userDataScopeRequest.getOrgId());
queryWrapper.eq(ObjectUtil.isNotNull(userDataScopeRequest.getUserId()), SysUserDataScope::getUserId, userDataScopeRequest.getUserId());
queryWrapper.eq(ObjectUtil.isNotNull(userDataScopeRequest.getUserDataScopeId()), SysUserDataScope::getUserDataScopeId, userDataScopeRequest.getUserDataScopeId());
return queryWrapper;
}
}

View File

@ -1,17 +1,18 @@
package cn.stylefeng.roses.kernel.system.modular.user.service.impl;
import cn.stylefeng.roses.kernel.system.exception.SystemModularException;
import cn.stylefeng.roses.kernel.system.exception.enums.SysUserExceptionEnum;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.system.modular.user.entity.SysUserRole;
import cn.stylefeng.roses.kernel.system.modular.user.mapper.SysUserRoleMapper;
import cn.stylefeng.roses.kernel.system.modular.user.service.SysUserRoleService;
import cn.stylefeng.roses.kernel.system.pojo.UserRoleRequest;
import cn.stylefeng.roses.kernel.system.pojo.user.request.SysUserRequest;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@ -24,58 +25,114 @@ import java.util.stream.Collectors;
@Service
public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUserRole> implements SysUserRoleService {
@Override
public List<SysUserRole> getUserRoles(Long userId) {
LambdaQueryWrapper<SysUserRole> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysUserRole::getUserId, userId);
List<SysUserRole> list = this.list(wrapper);
// 账号下没有绑定角色
if (list.isEmpty()) {
throw new SystemModularException(SysUserExceptionEnum.USER_NOT_BIND_ROLE);
}
return list;
public void add(UserRoleRequest userRoleRequest) {
SysUserRole sysUserRole = new SysUserRole();
BeanUtil.copyProperties(userRoleRequest, sysUserRole);
this.save(sysUserRole);
}
@Override
public List<Long> getUserRoleIds(Long userId) {
LambdaQueryWrapper<SysUserRole> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(SysUserRole::getUserId, userId);
List<SysUserRole> list = this.list(wrapper);
return list.stream().map(SysUserRole::getRoleId).collect(Collectors.toList());
public void del(UserRoleRequest userRoleRequest) {
SysUserRole sysUserRole = querySysUserRoleById(userRoleRequest);
this.removeById(sysUserRole.getUserRoleId());
}
@Override
public void delByUserId(Long userId) {
LambdaQueryWrapper<SysUserRole> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysUserRole::getUserId, userId);
this.remove(queryWrapper);
}
@Override
public void edit(UserRoleRequest userRoleRequest) {
SysUserRole sysUserRole = this.querySysUserRoleById(userRoleRequest);
BeanUtil.copyProperties(userRoleRequest, sysUserRole);
this.updateById(sysUserRole);
}
@Override
public SysUserRole detail(UserRoleRequest userRoleRequest) {
LambdaQueryWrapper<SysUserRole> queryWrapper = this.createQueryWrapper(userRoleRequest);
return this.getOne(queryWrapper, false);
}
@Override
public List<SysUserRole> findList(UserRoleRequest userRoleRequest) {
LambdaQueryWrapper<SysUserRole> queryWrapper = this.createQueryWrapper(userRoleRequest);
return this.list(queryWrapper);
}
@Override
public List<SysUserRole> findListByUserId(Long userId) {
UserRoleRequest userRoleRequest = new UserRoleRequest();
userRoleRequest.setUserId(userId);
return this.findList(userRoleRequest);
}
@Override
public List<Long> findRoleIdsByUserId(Long userId) {
UserRoleRequest userRoleRequest = new UserRoleRequest();
userRoleRequest.setUserId(userId);
List<SysUserRole> sysUserRoleList = this.findList(userRoleRequest);
return sysUserRoleList.stream().map(SysUserRole::getRoleId).collect(Collectors.toList());
}
@Override
@Transactional(rollbackFor = Exception.class)
public void grantRole(SysUserRequest sysUserRequest) {
public void assignRoles(SysUserRequest sysUserRequest) {
// 获取用户id
Long userId = sysUserRequest.getUserId();
// 删除该用户的所有角色
LambdaQueryWrapper<SysUserRole> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysUserRole::getUserId, userId);
this.remove(queryWrapper);
// 删除已有角色
this.delByUserId(userId);
// 为该用户授权角色
List<Long> roleIdList = sysUserRequest.getGrantRoleIdList();
List<Long> rileIds = sysUserRequest.getGrantRoleIdList();
ArrayList<SysUserRole> sysUserRoles = new ArrayList<>();
for (Long roleId : roleIdList) {
// 批量添加角色
List<SysUserRole> sysUserRoleList = CollUtil.newArrayList();
rileIds.forEach(roleId -> {
SysUserRole sysUserRole = new SysUserRole();
sysUserRole.setUserId(userId);
sysUserRole.setRoleId(roleId);
sysUserRoles.add(sysUserRole);
}
this.saveBatch(sysUserRoles);
sysUserRoleList.add(sysUserRole);
});
this.saveBatch(sysUserRoleList);
}
@Override
public void deleteUserRoleListByUserId(Long userId) {
/**
*
*
* @param userRoleRequest dto
* @return
* @author chenjinlong
* @date 2021/2/3 15:02
*/
private SysUserRole querySysUserRoleById(UserRoleRequest userRoleRequest) {
return this.getById(userRoleRequest.getUserRoleId());
}
/**
* QueryWrapper
*
* @param userRoleRequest dto
* @author chenjinlong
* @date 2021/2/3 14:54
*/
private LambdaQueryWrapper<SysUserRole> createQueryWrapper(UserRoleRequest userRoleRequest) {
LambdaQueryWrapper<SysUserRole> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysUserRole::getUserId, userId);
// SQL拼接
queryWrapper.eq(ObjectUtil.isNotNull(userRoleRequest.getUserRoleId()), SysUserRole::getUserRoleId, userRoleRequest.getUserRoleId());
queryWrapper.eq(ObjectUtil.isNotNull(userRoleRequest.getUserId()), SysUserRole::getUserId, userRoleRequest.getUserId());
queryWrapper.eq(ObjectUtil.isNotNull(userRoleRequest.getRoleId()), SysUserRole::getRoleId, userRoleRequest.getRoleId());
this.remove(queryWrapper);
return queryWrapper;
}
}

View File

@ -273,7 +273,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
DataScopeUtil.quickValidateDataScope(organizationId);
// 给用户授权角色
sysUserRoleService.grantRole(sysUserRequest);
sysUserRoleService.assignRoles(sysUserRequest);
}
@Override
@ -288,7 +288,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
// 判断当前用户有无该用户的权限
DataScopeUtil.quickValidateDataScope(organizationId);
sysUserDataScopeService.grantData(sysUserRequest);
sysUserDataScopeService.assignData(sysUserRequest);
}
@Override
@ -318,10 +318,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
sysUserOrgService.delByUserId(userId);
// 删除该用户对应的用户-角色表关联信息
sysUserRoleService.deleteUserRoleListByUserId(userId);
sysUserRoleService.delByUserId(userId);
// 删除该用户对应的用户-数据范围表关联信息
sysUserDataScopeService.deleteUserDataScopeListByUserId(userId);
sysUserDataScopeService.delByUserId(userId);
}
@Override
@ -338,7 +338,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
sysUserResponse.setPositionId(userOrgInfo.getPositionId());
// 获取用户角色信息
sysUserResponse.setGrantRoleIdList(sysUserRoleService.getUserRoleIds(sysUser.getUserId()));
sysUserResponse.setGrantRoleIdList(sysUserRoleService.findRoleIdsByUserId(sysUser.getUserId()));
return sysUserResponse;
}
@ -433,8 +433,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
Long userId = sysUser.getUserId();
// 2. 获取用户角色信息
List<SysUserRole> userRoles = sysUserRoleService.getUserRoles(userId);
List<Long> roleIds = userRoles.stream().map(SysUserRole::getRoleId).collect(Collectors.toList());
List<Long> roleIds = sysUserRoleService.findRoleIdsByUserId(userId);
List<SysRoleResponse> roleResponseList = roleServiceApi.getRolesByIds(roleIds);
// 3. 获取用户的数据范围
@ -505,7 +504,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
@Override
public List<Long> getUserBindDataScope(Long userId) {
return sysUserDataScopeService.getUserDataScopeIdList(userId);
return sysUserDataScopeService.findOrgIdsByUserId(userId);
}
@Override
@ -656,7 +655,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
queryWrapper.eq(ObjectUtil.isNotEmpty(sysUserRequest.getUserId()), SysUser::getUserId, sysUserRequest.getUserId());
queryWrapper.like(ObjectUtil.isNotEmpty(sysUserRequest.getAccount()), SysUser::getAccount, sysUserRequest.getAccount());
queryWrapper.eq(ObjectUtil.isNotEmpty(sysUserRequest.getRealName()), SysUser::getRealName, sysUserRequest.getRealName());
// 查询未删除状态的
queryWrapper.eq(SysUser::getDelFlag, YesOrNotEnum.N.getCode());