mirror of https://gitee.com/stylefeng/roses
【8.0】【sys】【role】更新角色绑定权限限制的两个接口
parent
6f94c3405b
commit
2007a08031
|
@ -0,0 +1,30 @@
|
||||||
|
package cn.stylefeng.roses.kernel.sys.modular.role.action;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.enums.PermissionNodeTypeEnum;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissionRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色绑定权限限制的接口
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2023/9/8 14:15
|
||||||
|
*/
|
||||||
|
public interface RoleBindLimitAction {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取操作的类型,有4种节点类型
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2023/9/8 14:15
|
||||||
|
*/
|
||||||
|
PermissionNodeTypeEnum getRoleBindLimitNodeType();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 进行角色绑定权限限制的过程,执行绑定的操作
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2023/9/8 14:16
|
||||||
|
*/
|
||||||
|
void doRoleBindLimitAction(RoleBindPermissionRequest roleBindPermissionRequest);
|
||||||
|
|
||||||
|
}
|
|
@ -41,9 +41,8 @@ public class SysRoleLimitController {
|
||||||
requirePermissionCode = PermissionCodeConstants.CHANGE_ROLE_BIND_LIMIT)
|
requirePermissionCode = PermissionCodeConstants.CHANGE_ROLE_BIND_LIMIT)
|
||||||
public ResponseData<RoleBindPermissionResponse> getRoleBindLimit(
|
public ResponseData<RoleBindPermissionResponse> getRoleBindLimit(
|
||||||
@Validated(BaseRequest.detail.class) RoleBindPermissionRequest roleBindPermissionRequest) {
|
@Validated(BaseRequest.detail.class) RoleBindPermissionRequest roleBindPermissionRequest) {
|
||||||
|
RoleBindPermissionResponse roleLimit = sysRoleLimitService.getRoleLimit(roleBindPermissionRequest);
|
||||||
|
return new SuccessResponseData<>(roleLimit);
|
||||||
return new SuccessResponseData<>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -56,8 +55,7 @@ public class SysRoleLimitController {
|
||||||
requirePermissionCode = PermissionCodeConstants.CHANGE_ROLE_BIND_LIMIT)
|
requirePermissionCode = PermissionCodeConstants.CHANGE_ROLE_BIND_LIMIT)
|
||||||
public ResponseData<?> bindRoleLimit(@RequestBody @Validated(RoleBindPermissionRequest.roleBindPermission.class)
|
public ResponseData<?> bindRoleLimit(@RequestBody @Validated(RoleBindPermissionRequest.roleBindPermission.class)
|
||||||
RoleBindPermissionRequest roleBindPermissionRequest) {
|
RoleBindPermissionRequest roleBindPermissionRequest) {
|
||||||
|
sysRoleLimitService.updateRoleBindLimit(roleBindPermissionRequest);
|
||||||
|
|
||||||
return new SuccessResponseData<>();
|
return new SuccessResponseData<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
package cn.stylefeng.roses.kernel.sys.modular.role.service;
|
package cn.stylefeng.roses.kernel.sys.modular.role.service;
|
||||||
|
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
|
||||||
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.pojo.request.SysRoleLimitRequest;
|
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissionRequest;
|
||||||
|
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.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 角色权限限制 服务类
|
* 角色权限限制 服务类
|
||||||
*
|
*
|
||||||
|
@ -15,60 +13,20 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
public interface SysRoleLimitService extends IService<SysRoleLimit> {
|
public interface SysRoleLimitService extends IService<SysRoleLimit> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增
|
* 获取角色绑定的权限限制列表
|
||||||
*
|
*
|
||||||
* @param sysRoleLimitRequest 请求参数
|
|
||||||
* @author fengshuonan
|
* @author fengshuonan
|
||||||
* @date 2023/09/08 12:55
|
* @since 2023/9/8 13:50
|
||||||
*/
|
*/
|
||||||
void add(SysRoleLimitRequest sysRoleLimitRequest);
|
RoleBindPermissionResponse getRoleLimit(RoleBindPermissionRequest roleBindPermissionRequest);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除
|
* 更新角色下绑定的权限限制
|
||||||
*
|
*
|
||||||
* @param sysRoleLimitRequest 请求参数
|
|
||||||
* @author fengshuonan
|
* @author fengshuonan
|
||||||
* @date 2023/09/08 12:55
|
* @since 2023/9/8 14:06
|
||||||
*/
|
*/
|
||||||
void del(SysRoleLimitRequest sysRoleLimitRequest);
|
void updateRoleBindLimit(RoleBindPermissionRequest roleBindPermissionRequest);
|
||||||
|
|
||||||
/**
|
|
||||||
* 编辑
|
|
||||||
*
|
|
||||||
* @param sysRoleLimitRequest 请求参数
|
|
||||||
* @author fengshuonan
|
|
||||||
* @date 2023/09/08 12:55
|
|
||||||
*/
|
|
||||||
void edit(SysRoleLimitRequest sysRoleLimitRequest);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询详情
|
|
||||||
*
|
|
||||||
* @param sysRoleLimitRequest 请求参数
|
|
||||||
* @author fengshuonan
|
|
||||||
* @date 2023/09/08 12:55
|
|
||||||
*/
|
|
||||||
SysRoleLimit detail(SysRoleLimitRequest sysRoleLimitRequest);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取列表
|
|
||||||
*
|
|
||||||
* @param sysRoleLimitRequest 请求参数
|
|
||||||
* @return List<SysRoleLimit> 返回结果
|
|
||||||
* @author fengshuonan
|
|
||||||
* @date 2023/09/08 12:55
|
|
||||||
*/
|
|
||||||
List<SysRoleLimit> findList(SysRoleLimitRequest sysRoleLimitRequest);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取列表(带分页)
|
|
||||||
*
|
|
||||||
* @param sysRoleLimitRequest 请求参数
|
|
||||||
* @return PageResult<SysRoleLimit> 返回结果
|
|
||||||
* @author fengshuonan
|
|
||||||
* @date 2023/09/08 12:55
|
|
||||||
*/
|
|
||||||
PageResult<SysRoleLimit> findPage(SysRoleLimitRequest sysRoleLimitRequest);
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,22 +1,25 @@
|
||||||
package cn.stylefeng.roses.kernel.sys.modular.role.service.impl;
|
package cn.stylefeng.roses.kernel.sys.modular.role.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
|
import cn.hutool.extra.spring.SpringUtil;
|
||||||
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
|
import cn.stylefeng.roses.kernel.sys.modular.role.action.RoleBindLimitAction;
|
||||||
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
|
|
||||||
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
|
|
||||||
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.SysRoleLimitExceptionEnum;
|
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.SysRoleLimitRequest;
|
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissionRequest;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.response.RoleBindPermissionResponse;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.service.PermissionAssignService;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleLimitService;
|
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.plugins.pagination.Page;
|
|
||||||
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 javax.annotation.Resource;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 角色权限限制业务实现层
|
* 角色权限限制业务实现层
|
||||||
|
@ -27,78 +30,48 @@ import java.util.List;
|
||||||
@Service
|
@Service
|
||||||
public class SysRoleLimitServiceImpl extends ServiceImpl<SysRoleLimitMapper, SysRoleLimit> implements SysRoleLimitService {
|
public class SysRoleLimitServiceImpl extends ServiceImpl<SysRoleLimitMapper, SysRoleLimit> implements SysRoleLimitService {
|
||||||
|
|
||||||
@Override
|
@Resource
|
||||||
public void add(SysRoleLimitRequest sysRoleLimitRequest) {
|
private PermissionAssignService permissionAssignService;
|
||||||
SysRoleLimit sysRoleLimit = new SysRoleLimit();
|
|
||||||
BeanUtil.copyProperties(sysRoleLimitRequest, sysRoleLimit);
|
@Override
|
||||||
this.save(sysRoleLimit);
|
public RoleBindPermissionResponse getRoleLimit(RoleBindPermissionRequest roleBindPermissionRequest) {
|
||||||
|
|
||||||
|
// 1. 整理出来一个总的相应的结构树,选择状态为空
|
||||||
|
RoleBindPermissionResponse selectTreeStructure = permissionAssignService.createSelectTreeStructure();
|
||||||
|
|
||||||
|
// 2. 获取角色限制所对应的菜单和功能列表
|
||||||
|
Set<Long> roleBindLimitList = this.getRoleBindLimitList(roleBindPermissionRequest.getRoleId());
|
||||||
|
|
||||||
|
// 3. 组合结构和角色绑定的限制信息,填充选择状态,封装返回结果
|
||||||
|
return PermissionAssignFactory.fillCheckedFlag(selectTreeStructure, roleBindLimitList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void del(SysRoleLimitRequest sysRoleLimitRequest) {
|
public void updateRoleBindLimit(RoleBindPermissionRequest roleBindPermissionRequest) {
|
||||||
SysRoleLimit sysRoleLimit = this.querySysRoleLimit(sysRoleLimitRequest);
|
Map<String, RoleBindLimitAction> operateActionMap = SpringUtil.getBeansOfType(RoleBindLimitAction.class);
|
||||||
this.removeById(sysRoleLimit.getRoleLimitId());
|
for (RoleBindLimitAction roleBindLimitAction : operateActionMap.values()) {
|
||||||
}
|
if (roleBindLimitAction.getRoleBindLimitNodeType().getCode().equals(roleBindPermissionRequest.getPermissionNodeType())) {
|
||||||
|
roleBindLimitAction.doRoleBindLimitAction(roleBindPermissionRequest);
|
||||||
@Override
|
return;
|
||||||
public void edit(SysRoleLimitRequest sysRoleLimitRequest) {
|
}
|
||||||
SysRoleLimit sysRoleLimit = this.querySysRoleLimit(sysRoleLimitRequest);
|
|
||||||
BeanUtil.copyProperties(sysRoleLimitRequest, sysRoleLimit);
|
|
||||||
this.updateById(sysRoleLimit);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public SysRoleLimit detail(SysRoleLimitRequest sysRoleLimitRequest) {
|
|
||||||
return this.querySysRoleLimit(sysRoleLimitRequest);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PageResult<SysRoleLimit> findPage(SysRoleLimitRequest sysRoleLimitRequest) {
|
|
||||||
LambdaQueryWrapper<SysRoleLimit> wrapper = createWrapper(sysRoleLimitRequest);
|
|
||||||
Page<SysRoleLimit> sysRolePage = this.page(PageFactory.defaultPage(), wrapper);
|
|
||||||
return PageResultFactory.createPageResult(sysRolePage);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<SysRoleLimit> findList(SysRoleLimitRequest sysRoleLimitRequest) {
|
|
||||||
LambdaQueryWrapper<SysRoleLimit> wrapper = this.createWrapper(sysRoleLimitRequest);
|
|
||||||
return this.list(wrapper);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取信息
|
|
||||||
*
|
|
||||||
* @author fengshuonan
|
|
||||||
* @date 2023/09/08 12:55
|
|
||||||
*/
|
|
||||||
private SysRoleLimit querySysRoleLimit(SysRoleLimitRequest sysRoleLimitRequest) {
|
|
||||||
SysRoleLimit sysRoleLimit = this.getById(sysRoleLimitRequest.getRoleLimitId());
|
|
||||||
if (ObjectUtil.isEmpty(sysRoleLimit)) {
|
|
||||||
throw new ServiceException(SysRoleLimitExceptionEnum.SYS_ROLE_LIMIT_NOT_EXISTED);
|
|
||||||
}
|
}
|
||||||
return sysRoleLimit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建查询wrapper
|
* 获取角色绑定的限制列表(包含限制的菜单id和限制的菜单功能id)
|
||||||
*
|
*
|
||||||
* @author fengshuonan
|
* @author fengshuonan
|
||||||
* @date 2023/09/08 12:55
|
* @since 2023/9/8 13:55
|
||||||
*/
|
*/
|
||||||
private LambdaQueryWrapper<SysRoleLimit> createWrapper(SysRoleLimitRequest sysRoleLimitRequest) {
|
private Set<Long> getRoleBindLimitList(Long roleId) {
|
||||||
LambdaQueryWrapper<SysRoleLimit> queryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<SysRoleLimit> sysRoleLimitLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
sysRoleLimitLambdaQueryWrapper.select(SysRoleLimit::getBusinessId);
|
||||||
Long roleLimitId = sysRoleLimitRequest.getRoleLimitId();
|
sysRoleLimitLambdaQueryWrapper.eq(SysRoleLimit::getRoleId, roleId);
|
||||||
Long roleId = sysRoleLimitRequest.getRoleId();
|
List<SysRoleLimit> sysRoleMenuList = this.list(sysRoleLimitLambdaQueryWrapper);
|
||||||
Integer limitType = sysRoleLimitRequest.getLimitType();
|
if (ObjectUtil.isEmpty(sysRoleMenuList)) {
|
||||||
Long businessId = sysRoleLimitRequest.getBusinessId();
|
return new HashSet<>();
|
||||||
|
}
|
||||||
queryWrapper.eq(ObjectUtil.isNotNull(roleLimitId), SysRoleLimit::getRoleLimitId, roleLimitId);
|
return sysRoleMenuList.stream().map(SysRoleLimit::getBusinessId).collect(Collectors.toSet());
|
||||||
queryWrapper.eq(ObjectUtil.isNotNull(roleId), SysRoleLimit::getRoleId, roleId);
|
|
||||||
queryWrapper.eq(ObjectUtil.isNotNull(limitType), SysRoleLimit::getLimitType, limitType);
|
|
||||||
queryWrapper.eq(ObjectUtil.isNotNull(businessId), SysRoleLimit::getBusinessId, businessId);
|
|
||||||
|
|
||||||
return queryWrapper;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue