update 当前用户所有权限增加岗位ID权限

This commit is contained in:
AprilWind 2024-11-12 16:21:09 +08:00
parent 5b337b4d2f
commit 9708d6e1bc
5 changed files with 58 additions and 13 deletions

View File

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

View File

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

View File

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.CacheNames;
import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.domain.dto.TaskAssigneeDTO;
import org.dromara.common.core.domain.model.TaskAssigneeBody;
@ -25,6 +26,7 @@ import org.dromara.system.mapper.SysDeptMapper;
import org.dromara.system.mapper.SysPostMapper;
import org.dromara.system.mapper.SysUserPostMapper;
import org.dromara.system.service.ISysPostService;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import java.util.Arrays;
@ -238,6 +240,21 @@ public class SysPostServiceImpl implements ISysPostService, PostService {
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,6 +34,7 @@ import org.dromara.system.mapper.*;
import org.dromara.system.service.ISysUserService;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -329,8 +330,11 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
* @param user 用户信息
* @return 结果
*/
@Caching(evict = {
@CacheEvict(cacheNames = CacheNames.SYS_NICKNAME, key = "#user.userId"),
@CacheEvict(cacheNames = CacheNames.SYS_POST_ID, key = "#user.userId")}
)
@Override
@CacheEvict(cacheNames = CacheNames.SYS_NICKNAME, key = "#user.userId")
@Transactional(rollbackFor = Exception.class)
public int updateUser(SysUserBo user) {
// 新增用户与角色管理

View File

@ -3,20 +3,17 @@ package org.dromara.workflow.utils;
import cn.hutool.core.collection.CollUtil;
import com.warm.flow.core.entity.User;
import com.warm.flow.orm.entity.FlowUser;
import java.util.Collections;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.dromara.common.core.domain.dto.UserDTO;
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.satoken.utils.LoginHelper;
import org.dromara.workflow.common.enums.TaskAssigneeEnum;
import org.dromara.workflow.service.IWfTaskAssigneeService;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@ -35,15 +32,27 @@ public class WorkflowUtils {
*/
public static List<String> permissionList() {
LoginUser loginUser = LoginHelper.getLoginUser();
Long userId = loginUser.getUserId();
Long deptId = loginUser.getDeptId();
//todo 岗位获取待考虑
return Stream.concat(
loginUser.getRoles().stream().map(role -> TaskAssigneeEnum.ROLE.getCode() + role.getRoleId()),
Stream.of(
TaskAssigneeEnum.USER.getCode() + loginUser.getUserId(),
TaskAssigneeEnum.DEPT.getCode() + deptId
List<Long> postIds = SpringUtils.getBean(PostService.class).selectPostIdByUserIdList(userId);
// 使用一个流来构建权限列表
return Stream.of(
// 角色权限前缀
loginUser.getRoles().stream()
.map(role -> TaskAssigneeEnum.ROLE.getCode() + role.getRoleId()),
// 岗位权限前缀
postIds.stream()
.map(postId -> TaskAssigneeEnum.POST.getCode() + postId),
// 用户和部门权限
Stream.of(
TaskAssigneeEnum.USER.getCode() + userId,
TaskAssigneeEnum.DEPT.getCode() + deptId
)
)
).collect(Collectors.toList());
.flatMap(stream -> stream)
.collect(Collectors.toList());
}
/**