mirror of https://gitee.com/stylefeng/roses
【8.1.0】【role】更新一个刷新角色权限的接口
parent
8e96e3af19
commit
4b0b037501
|
@ -6,6 +6,8 @@ import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissio
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.response.RoleBindPermissionResponse;
|
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.response.RoleBindPermissionResponse;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 角色权限限制 服务类
|
* 角色权限限制 服务类
|
||||||
*
|
*
|
||||||
|
@ -30,4 +32,12 @@ public interface SysRoleLimitService extends IService<SysRoleLimit>, SysRoleLimi
|
||||||
*/
|
*/
|
||||||
void updateRoleBindLimit(RoleBindPermissionRequest roleBindPermissionRequest);
|
void updateRoleBindLimit(RoleBindPermissionRequest roleBindPermissionRequest);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新角色的权限范围
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2024-01-23 14:22
|
||||||
|
*/
|
||||||
|
void updateRoleLimit(Long roleId, Set<Long> menuIdList, Set<Long> menuOptionIdList);
|
||||||
|
|
||||||
}
|
}
|
|
@ -8,6 +8,7 @@ import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.SysRoleRequest;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 系统角色 服务类
|
* 系统角色 服务类
|
||||||
|
@ -119,4 +120,12 @@ public interface SysRoleService extends IService<SysRole>, SysRoleServiceApi {
|
||||||
*/
|
*/
|
||||||
List<SysRole> userAssignRoleList(SysRoleRequest sysRoleRequest);
|
List<SysRole> userAssignRoleList(SysRoleRequest sysRoleRequest);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将指定角色id,进行权限刷新,从新绑定对应的菜单和功能,并将角色权限范围也绑定指定的功能id
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2024-01-23 13:59
|
||||||
|
*/
|
||||||
|
void refreshRoleAuth(Set<Long> roleIdList, Set<Long> menuIdList, Set<Long> menuOptionIdList);
|
||||||
|
|
||||||
}
|
}
|
|
@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.extra.spring.SpringUtil;
|
import cn.hutool.extra.spring.SpringUtil;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.action.RoleBindLimitAction;
|
import cn.stylefeng.roses.kernel.sys.modular.role.action.RoleBindLimitAction;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRoleLimit;
|
import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRoleLimit;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.enums.RoleLimitTypeEnum;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.factory.PermissionAssignFactory;
|
import cn.stylefeng.roses.kernel.sys.modular.role.factory.PermissionAssignFactory;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.mapper.SysRoleLimitMapper;
|
import cn.stylefeng.roses.kernel.sys.modular.role.mapper.SysRoleLimitMapper;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissionRequest;
|
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissionRequest;
|
||||||
|
@ -14,12 +15,10 @@ import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleLimitService;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.HashSet;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -58,6 +57,43 @@ public class SysRoleLimitServiceImpl extends ServiceImpl<SysRoleLimitMapper, Sys
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void updateRoleLimit(Long roleId, Set<Long> menuIdList, Set<Long> menuOptionIdList) {
|
||||||
|
|
||||||
|
// 删除角色所绑定的权限范围
|
||||||
|
LambdaQueryWrapper<SysRoleLimit> sysRoleLimitLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
sysRoleLimitLambdaQueryWrapper.eq(SysRoleLimit::getRoleId, roleId);
|
||||||
|
this.remove(sysRoleLimitLambdaQueryWrapper);
|
||||||
|
|
||||||
|
// 初始化菜单id列表数据
|
||||||
|
List<SysRoleLimit> sysRoleLimits = new ArrayList<>();
|
||||||
|
if (ObjectUtil.isNotEmpty(menuIdList)) {
|
||||||
|
for (Long menuId : menuIdList) {
|
||||||
|
SysRoleLimit sysRoleLimit = new SysRoleLimit();
|
||||||
|
sysRoleLimit.setRoleId(roleId);
|
||||||
|
sysRoleLimit.setLimitType(RoleLimitTypeEnum.MENU.getCode());
|
||||||
|
sysRoleLimit.setBusinessId(menuId);
|
||||||
|
sysRoleLimits.add(sysRoleLimit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化菜单功能id列表的数据
|
||||||
|
if (ObjectUtil.isNotEmpty(menuOptionIdList)) {
|
||||||
|
for (Long menuOptionId : menuOptionIdList) {
|
||||||
|
SysRoleLimit sysRoleLimit = new SysRoleLimit();
|
||||||
|
sysRoleLimit.setRoleId(roleId);
|
||||||
|
sysRoleLimit.setLimitType(RoleLimitTypeEnum.MENU_OPTIONS.getCode());
|
||||||
|
sysRoleLimit.setBusinessId(menuOptionId);
|
||||||
|
sysRoleLimits.add(sysRoleLimit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ObjectUtil.isNotEmpty(sysRoleLimits)) {
|
||||||
|
this.saveBatch(sysRoleLimits);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取角色绑定的限制列表(包含限制的菜单id和限制的菜单功能id)
|
* 获取角色绑定的限制列表(包含限制的菜单id和限制的菜单功能id)
|
||||||
*
|
*
|
||||||
|
|
|
@ -18,12 +18,17 @@ import cn.stylefeng.roses.kernel.sys.api.constants.SysConstants;
|
||||||
import cn.stylefeng.roses.kernel.sys.api.enums.permission.DataScopeTypeEnum;
|
import cn.stylefeng.roses.kernel.sys.api.enums.permission.DataScopeTypeEnum;
|
||||||
import cn.stylefeng.roses.kernel.sys.api.enums.role.RoleTypeEnum;
|
import cn.stylefeng.roses.kernel.sys.api.enums.role.RoleTypeEnum;
|
||||||
import cn.stylefeng.roses.kernel.sys.api.pojo.role.SysRoleDTO;
|
import cn.stylefeng.roses.kernel.sys.api.pojo.role.SysRoleDTO;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenuOptions;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuOptionsService;
|
import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuOptionsService;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuService;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRole;
|
import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRole;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.enums.exception.SysRoleExceptionEnum;
|
import cn.stylefeng.roses.kernel.sys.modular.role.enums.exception.SysRoleExceptionEnum;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.mapper.SysRoleMapper;
|
import cn.stylefeng.roses.kernel.sys.modular.role.mapper.SysRoleMapper;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.SysRoleRequest;
|
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.SysRoleRequest;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleLimitService;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuOptionsService;
|
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuOptionsService;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuService;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleService;
|
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleService;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
|
@ -53,6 +58,15 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
||||||
@Resource
|
@Resource
|
||||||
private SysMenuOptionsService sysMenuOptionsService;
|
private SysMenuOptionsService sysMenuOptionsService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SysRoleMenuService sysRoleMenuService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SysMenuService sysMenuService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SysRoleLimitService sysRoleLimitService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void add(SysRoleRequest sysRoleRequest) {
|
public void add(SysRoleRequest sysRoleRequest) {
|
||||||
|
|
||||||
|
@ -169,8 +183,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
||||||
LambdaQueryWrapper<SysRole> wrapper = createWrapper(sysRoleRequest);
|
LambdaQueryWrapper<SysRole> wrapper = createWrapper(sysRoleRequest);
|
||||||
|
|
||||||
// 只查询需要的字段
|
// 只查询需要的字段
|
||||||
wrapper.select(SysRole::getRoleName, SysRole::getRoleCode, SysRole::getRoleSort, SysRole::getRoleId, BaseEntity::getCreateTime,
|
wrapper.select(SysRole::getRoleName, SysRole::getRoleCode, SysRole::getRoleSort, SysRole::getRoleId, BaseEntity::getCreateTime, SysRole::getRoleType, SysRole::getRoleCompanyId);
|
||||||
SysRole::getRoleType, SysRole::getRoleCompanyId);
|
|
||||||
|
|
||||||
// 非管理员用户只能查看自己创建的角色
|
// 非管理员用户只能查看自己创建的角色
|
||||||
this.filterRolePermission(wrapper, sysRoleRequest);
|
this.filterRolePermission(wrapper, sysRoleRequest);
|
||||||
|
@ -255,6 +268,27 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
||||||
return this.list(wrapper);
|
return this.list(wrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void refreshRoleAuth(Set<Long> roleIdList, Set<Long> menuIdList, Set<Long> menuOptionIdList) {
|
||||||
|
|
||||||
|
// 获取菜单的appId和menuId
|
||||||
|
List<SysMenu> totalMenus = sysMenuService.getTotalMenus(menuIdList);
|
||||||
|
|
||||||
|
// 获取菜单功能的填充信息
|
||||||
|
List<SysMenuOptions> totalMenuOptionsList = sysMenuOptionsService.getTotalMenuOptionsList(menuOptionIdList);
|
||||||
|
|
||||||
|
for (Long roleId : roleIdList) {
|
||||||
|
// 绑定角色的菜单
|
||||||
|
sysRoleMenuService.bindRoleMenus(roleId, totalMenus);
|
||||||
|
|
||||||
|
// 绑定角色菜单功能
|
||||||
|
sysRoleMenuOptionsService.bindRoleMenuOptions(roleId, totalMenuOptionsList);
|
||||||
|
|
||||||
|
// 更新角色的权限范围
|
||||||
|
this.sysRoleLimitService.updateRoleLimit(roleId, menuIdList, menuOptionIdList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<SysRole> permissionGetRoleList(SysRoleRequest sysRoleRequest) {
|
public List<SysRole> permissionGetRoleList(SysRoleRequest sysRoleRequest) {
|
||||||
LambdaQueryWrapper<SysRole> wrapper = this.createWrapper(sysRoleRequest);
|
LambdaQueryWrapper<SysRole> wrapper = this.createWrapper(sysRoleRequest);
|
||||||
|
|
Loading…
Reference in New Issue