【8.0】【sys】【role】更新角色绑定权限限制的两个接口

pull/57/head
fengshuonan 2023-09-08 14:19:09 +08:00
parent 6f94c3405b
commit 2007a08031
4 changed files with 86 additions and 127 deletions

View File

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

View File

@ -41,9 +41,8 @@ public class SysRoleLimitController {
requirePermissionCode = PermissionCodeConstants.CHANGE_ROLE_BIND_LIMIT)
public ResponseData<RoleBindPermissionResponse> getRoleBindLimit(
@Validated(BaseRequest.detail.class) RoleBindPermissionRequest roleBindPermissionRequest) {
return new SuccessResponseData<>();
RoleBindPermissionResponse roleLimit = sysRoleLimitService.getRoleLimit(roleBindPermissionRequest);
return new SuccessResponseData<>(roleLimit);
}
/**
@ -56,8 +55,7 @@ public class SysRoleLimitController {
requirePermissionCode = PermissionCodeConstants.CHANGE_ROLE_BIND_LIMIT)
public ResponseData<?> bindRoleLimit(@RequestBody @Validated(RoleBindPermissionRequest.roleBindPermission.class)
RoleBindPermissionRequest roleBindPermissionRequest) {
sysRoleLimitService.updateRoleBindLimit(roleBindPermissionRequest);
return new SuccessResponseData<>();
}

View File

@ -1,12 +1,10 @@
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.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 java.util.List;
/**
*
*
@ -15,60 +13,20 @@ import java.util.List;
*/
public interface SysRoleLimitService extends IService<SysRoleLimit> {
/**
*
/**
*
*
* @param sysRoleLimitRequest
* @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
* @date 2023/09/08 12:55
* @since 2023/9/8 14:06
*/
void del(SysRoleLimitRequest sysRoleLimitRequest);
/**
*
*
* @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);
void updateRoleBindLimit(RoleBindPermissionRequest roleBindPermissionRequest);
}

View File

@ -1,22 +1,25 @@
package cn.stylefeng.roses.kernel.sys.modular.role.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.db.api.factory.PageFactory;
import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException;
import cn.hutool.extra.spring.SpringUtil;
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.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.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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.HashSet;
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
public class SysRoleLimitServiceImpl extends ServiceImpl<SysRoleLimitMapper, SysRoleLimit> implements SysRoleLimitService {
@Override
public void add(SysRoleLimitRequest sysRoleLimitRequest) {
SysRoleLimit sysRoleLimit = new SysRoleLimit();
BeanUtil.copyProperties(sysRoleLimitRequest, sysRoleLimit);
this.save(sysRoleLimit);
@Resource
private PermissionAssignService permissionAssignService;
@Override
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
public void del(SysRoleLimitRequest sysRoleLimitRequest) {
SysRoleLimit sysRoleLimit = this.querySysRoleLimit(sysRoleLimitRequest);
this.removeById(sysRoleLimit.getRoleLimitId());
}
@Override
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);
public void updateRoleBindLimit(RoleBindPermissionRequest roleBindPermissionRequest) {
Map<String, RoleBindLimitAction> operateActionMap = SpringUtil.getBeansOfType(RoleBindLimitAction.class);
for (RoleBindLimitAction roleBindLimitAction : operateActionMap.values()) {
if (roleBindLimitAction.getRoleBindLimitNodeType().getCode().equals(roleBindPermissionRequest.getPermissionNodeType())) {
roleBindLimitAction.doRoleBindLimitAction(roleBindPermissionRequest);
return;
}
}
return sysRoleLimit;
}
/**
* wrapper
* idid
*
* @author fengshuonan
* @date 2023/09/08 12:55
* @since 2023/9/8 13:55
*/
private LambdaQueryWrapper<SysRoleLimit> createWrapper(SysRoleLimitRequest sysRoleLimitRequest) {
LambdaQueryWrapper<SysRoleLimit> queryWrapper = new LambdaQueryWrapper<>();
Long roleLimitId = sysRoleLimitRequest.getRoleLimitId();
Long roleId = sysRoleLimitRequest.getRoleId();
Integer limitType = sysRoleLimitRequest.getLimitType();
Long businessId = sysRoleLimitRequest.getBusinessId();
queryWrapper.eq(ObjectUtil.isNotNull(roleLimitId), SysRoleLimit::getRoleLimitId, roleLimitId);
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;
private Set<Long> getRoleBindLimitList(Long roleId) {
LambdaQueryWrapper<SysRoleLimit> sysRoleLimitLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysRoleLimitLambdaQueryWrapper.select(SysRoleLimit::getBusinessId);
sysRoleLimitLambdaQueryWrapper.eq(SysRoleLimit::getRoleId, roleId);
List<SysRoleLimit> sysRoleMenuList = this.list(sysRoleLimitLambdaQueryWrapper);
if (ObjectUtil.isEmpty(sysRoleMenuList)) {
return new HashSet<>();
}
return sysRoleMenuList.stream().map(SysRoleLimit::getBusinessId).collect(Collectors.toSet());
}
}