update 当前用户所有权限岗位ID改为从token获取

This commit is contained in:
AprilWind 2024-11-12 17:25:16 +08:00
parent 9708d6e1bc
commit 6a7ec27a21
9 changed files with 84 additions and 46 deletions

View File

@ -14,6 +14,7 @@ import org.dromara.common.core.constant.CacheConstants;
import org.dromara.common.core.constant.Constants; import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.constant.SystemConstants; import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.constant.TenantConstants; import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.domain.dto.PostDTO;
import org.dromara.common.core.domain.dto.RoleDTO; import org.dromara.common.core.domain.dto.RoleDTO;
import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.enums.LoginType; import org.dromara.common.core.enums.LoginType;
@ -60,6 +61,7 @@ public class SysLoginService {
private final ISysSocialService sysSocialService; private final ISysSocialService sysSocialService;
private final ISysRoleService roleService; private final ISysRoleService roleService;
private final ISysDeptService deptService; private final ISysDeptService deptService;
private final ISysPostService postService;
private final SysUserMapper userMapper; private final SysUserMapper userMapper;
@ -148,21 +150,24 @@ public class SysLoginService {
*/ */
public LoginUser buildLoginUser(SysUserVo user) { public LoginUser buildLoginUser(SysUserVo user) {
LoginUser loginUser = new LoginUser(); LoginUser loginUser = new LoginUser();
Long userId = user.getUserId();
loginUser.setTenantId(user.getTenantId()); loginUser.setTenantId(user.getTenantId());
loginUser.setUserId(user.getUserId()); loginUser.setUserId(userId);
loginUser.setDeptId(user.getDeptId()); loginUser.setDeptId(user.getDeptId());
loginUser.setUsername(user.getUserName()); loginUser.setUsername(user.getUserName());
loginUser.setNickname(user.getNickName()); loginUser.setNickname(user.getNickName());
loginUser.setUserType(user.getUserType()); loginUser.setUserType(user.getUserType());
loginUser.setMenuPermission(permissionService.getMenuPermission(user.getUserId())); loginUser.setMenuPermission(permissionService.getMenuPermission(userId));
loginUser.setRolePermission(permissionService.getRolePermission(user.getUserId())); loginUser.setRolePermission(permissionService.getRolePermission(userId));
if (ObjectUtil.isNotNull(user.getDeptId())) { if (ObjectUtil.isNotNull(user.getDeptId())) {
Opt<SysDeptVo> deptOpt = Opt.of(user.getDeptId()).map(deptService::selectDeptById); Opt<SysDeptVo> deptOpt = Opt.of(user.getDeptId()).map(deptService::selectDeptById);
loginUser.setDeptName(deptOpt.map(SysDeptVo::getDeptName).orElse(StringUtils.EMPTY)); loginUser.setDeptName(deptOpt.map(SysDeptVo::getDeptName).orElse(StringUtils.EMPTY));
loginUser.setDeptCategory(deptOpt.map(SysDeptVo::getDeptCategory).orElse(StringUtils.EMPTY)); loginUser.setDeptCategory(deptOpt.map(SysDeptVo::getDeptCategory).orElse(StringUtils.EMPTY));
} }
List<SysRoleVo> roles = roleService.selectRolesByUserId(user.getUserId()); List<SysRoleVo> roles = roleService.selectRolesByUserId(userId);
List<SysPostVo> posts = postService.selectPostsByUserId(userId);
loginUser.setRoles(BeanUtil.copyToList(roles, RoleDTO.class)); loginUser.setRoles(BeanUtil.copyToList(roles, RoleDTO.class));
loginUser.setPosts(BeanUtil.copyToList(posts, PostDTO.class));
return loginUser; return loginUser;
} }

View File

@ -55,11 +55,6 @@ public interface CacheNames {
*/ */
String SYS_DEPT = "sys_dept#30d"; String SYS_DEPT = "sys_dept#30d";
/**
* 岗位 ID 列表
*/
String SYS_POST_ID = "sys_post_id#30d";
/** /**
* OSS内容 * OSS内容
*/ */

View File

@ -0,0 +1,46 @@
package org.dromara.common.core.domain.dto;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
/**
* 岗位
*
* @author AprilWind
*/
@Data
@NoArgsConstructor
public class PostDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 岗位ID
*/
private Long postId;
/**
* 部门id
*/
private Long deptId;
/**
* 岗位编码
*/
private String postCode;
/**
* 岗位名称
*/
private String postName;
/**
* 岗位类别编码
*/
private String postCategory;
}

View File

@ -1,8 +1,9 @@
package org.dromara.common.core.domain.model; package org.dromara.common.core.domain.model;
import org.dromara.common.core.domain.dto.RoleDTO;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.dromara.common.core.domain.dto.PostDTO;
import org.dromara.common.core.domain.dto.RoleDTO;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
@ -111,6 +112,11 @@ public class LoginUser implements Serializable {
*/ */
private List<RoleDTO> roles; private List<RoleDTO> roles;
/**
* 岗位对象
*/
private List<PostDTO> posts;
/** /**
* 数据权限 当前角色ID * 数据权限 当前角色ID
*/ */

View File

@ -3,8 +3,6 @@ package org.dromara.common.core.service;
import org.dromara.common.core.domain.dto.TaskAssigneeDTO; import org.dromara.common.core.domain.dto.TaskAssigneeDTO;
import org.dromara.common.core.domain.model.TaskAssigneeBody; import org.dromara.common.core.domain.model.TaskAssigneeBody;
import java.util.List;
/** /**
* 通用 岗位服务 * 通用 岗位服务
* *
@ -12,14 +10,6 @@ import java.util.List;
*/ */
public interface PostService { public interface PostService {
/**
* 根据用户 ID 查询其所属的岗位 ID 列表
*
* @param userId 用户 ID用于确定用户所属的岗位
* @return 与该用户关联的岗位 ID 列表如果未找到则返回空列表
*/
List<Long> selectPostIdByUserIdList(Long userId);
/** /**
* 查询岗位并返回任务指派的列表支持分页 * 查询岗位并返回任务指派的列表支持分页
* *

View File

@ -25,6 +25,14 @@ public interface ISysPostService {
*/ */
List<SysPostVo> selectPostList(SysPostBo post); List<SysPostVo> selectPostList(SysPostBo post);
/**
* 查询用户所属岗位组
*
* @param userId 用户ID
* @return 岗位ID
*/
List<SysPostVo> selectPostsByUserId(Long userId);
/** /**
* 查询所有岗位 * 查询所有岗位
* *

View File

@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.constant.SystemConstants; import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.domain.dto.TaskAssigneeDTO; import org.dromara.common.core.domain.dto.TaskAssigneeDTO;
import org.dromara.common.core.domain.model.TaskAssigneeBody; import org.dromara.common.core.domain.model.TaskAssigneeBody;
@ -26,7 +25,6 @@ import org.dromara.system.mapper.SysDeptMapper;
import org.dromara.system.mapper.SysPostMapper; import org.dromara.system.mapper.SysPostMapper;
import org.dromara.system.mapper.SysUserPostMapper; import org.dromara.system.mapper.SysUserPostMapper;
import org.dromara.system.service.ISysPostService; import org.dromara.system.service.ISysPostService;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Arrays; import java.util.Arrays;
@ -63,6 +61,17 @@ public class SysPostServiceImpl implements ISysPostService, PostService {
return baseMapper.selectVoList(buildQueryWrapper(post)); return baseMapper.selectVoList(buildQueryWrapper(post));
} }
/**
* 查询用户所属岗位组
*
* @param userId 用户ID
* @return 岗位ID
*/
@Override
public List<SysPostVo> selectPostsByUserId(Long userId) {
return baseMapper.selectPostsByUserId(userId);
}
/** /**
* 根据查询条件构建查询包装器 * 根据查询条件构建查询包装器
* *
@ -240,21 +249,6 @@ public class SysPostServiceImpl implements ISysPostService, PostService {
return baseMapper.updateById(post); return baseMapper.updateById(post);
} }
/**
* 根据用户 ID 查询其所属的岗位 ID 列表
*
* @param userId 用户 ID用于确定用户所属的岗位
* @return 与该用户关联的岗位 ID 列表如果未找到则返回空列表
*/
@Cacheable(cacheNames = CacheNames.SYS_POST_ID, key = "#userId")
@Override
public List<Long> selectPostIdByUserIdList(Long userId) {
// 通过岗位ID获取用户岗位信息
List<SysUserPost> userPosts = userPostMapper.selectList(
new LambdaQueryWrapper<SysUserPost>().eq(SysUserPost::getUserId, userId));
return StreamUtils.toList(userPosts, SysUserPost::getPostId);
}
/** /**
* 查询岗位并返回任务指派的列表支持分页 * 查询岗位并返回任务指派的列表支持分页
* *

View File

@ -34,7 +34,6 @@ import org.dromara.system.mapper.*;
import org.dromara.system.service.ISysUserService; import org.dromara.system.service.ISysUserService;
import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -330,11 +329,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
* @param user 用户信息 * @param user 用户信息
* @return 结果 * @return 结果
*/ */
@Caching(evict = {
@CacheEvict(cacheNames = CacheNames.SYS_NICKNAME, key = "#user.userId"),
@CacheEvict(cacheNames = CacheNames.SYS_POST_ID, key = "#user.userId")}
)
@Override @Override
@CacheEvict(cacheNames = CacheNames.SYS_NICKNAME, key = "#user.userId")
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int updateUser(SysUserBo user) { public int updateUser(SysUserBo user) {
// 新增用户与角色管理 // 新增用户与角色管理

View File

@ -7,7 +7,6 @@ import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.dromara.common.core.domain.dto.UserDTO; import org.dromara.common.core.domain.dto.UserDTO;
import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.service.PostService;
import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.workflow.common.enums.TaskAssigneeEnum; import org.dromara.workflow.common.enums.TaskAssigneeEnum;
@ -34,7 +33,6 @@ public class WorkflowUtils {
LoginUser loginUser = LoginHelper.getLoginUser(); LoginUser loginUser = LoginHelper.getLoginUser();
Long userId = loginUser.getUserId(); Long userId = loginUser.getUserId();
Long deptId = loginUser.getDeptId(); Long deptId = loginUser.getDeptId();
List<Long> postIds = SpringUtils.getBean(PostService.class).selectPostIdByUserIdList(userId);
// 使用一个流来构建权限列表 // 使用一个流来构建权限列表
return Stream.of( return Stream.of(
// 角色权限前缀 // 角色权限前缀
@ -42,8 +40,8 @@ public class WorkflowUtils {
.map(role -> TaskAssigneeEnum.ROLE.getCode() + role.getRoleId()), .map(role -> TaskAssigneeEnum.ROLE.getCode() + role.getRoleId()),
// 岗位权限前缀 // 岗位权限前缀
postIds.stream() loginUser.getPosts().stream()
.map(postId -> TaskAssigneeEnum.POST.getCode() + postId), .map(post -> TaskAssigneeEnum.POST.getCode() + post.getPostId()),
// 用户和部门权限 // 用户和部门权限
Stream.of( Stream.of(