【8.1.0】【role】更新一个刷新角色权限的接口

pull/60/head
fengshuonan 2024-01-23 14:42:12 +08:00
parent 8e96e3af19
commit 4b0b037501
4 changed files with 95 additions and 6 deletions

View File

@ -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);
} }

View File

@ -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);
/**
* idid
*
* @author fengshuonan
* @since 2024-01-23 13:59
*/
void refreshRoleAuth(Set<Long> roleIdList, Set<Long> menuIdList, Set<Long> menuOptionIdList);
} }

View File

@ -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);
}
}
/** /**
* idid * idid
* *

View File

@ -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);