【7.2.5】【role】更新角色绑定所有资源

pull/37/head
fengshuonan 2022-09-29 14:37:44 +08:00
parent 2eb6f0f7ec
commit f118bf4342
5 changed files with 99 additions and 20 deletions

View File

@ -24,9 +24,11 @@
*/
package cn.stylefeng.roses.kernel.system.api;
import cn.stylefeng.roses.kernel.rule.enums.ResBizTypeEnum;
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceDefinition;
import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceUrlParam;
import java.util.List;
import java.util.Set;
/**
@ -65,4 +67,14 @@ public interface ResourceServiceApi {
*/
Integer getResourceCount();
/**
*
*
* @param resBizTypeEnum
* @return
* @author fengshuonan
* @date 2022/9/29 14:27
*/
List<String> getTotalResourceCode(ResBizTypeEnum resBizTypeEnum);
}

View File

@ -39,6 +39,7 @@ import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.rule.constants.RuleConstants;
import cn.stylefeng.roses.kernel.rule.constants.TreeConstants;
import cn.stylefeng.roses.kernel.rule.enums.DbTypeEnum;
import cn.stylefeng.roses.kernel.rule.enums.ResBizTypeEnum;
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
import cn.stylefeng.roses.kernel.rule.tree.factory.DefaultTreeBuildFactory;
import cn.stylefeng.roses.kernel.scanner.api.ResourceReportApi;
@ -137,8 +138,8 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
// 获取所有的资源
LambdaQueryWrapper<SysResource> sysResourceLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysResourceLambdaQueryWrapper.select(SysResource::getAppCode, SysResource::getModularCode, SysResource::getModularName, SysResource::getResourceCode,
SysResource::getUrl, SysResource::getResourceName);
sysResourceLambdaQueryWrapper.select(SysResource::getAppCode, SysResource::getModularCode, SysResource::getModularName, SysResource::getResourceCode, SysResource::getUrl,
SysResource::getResourceName);
// 只查询需要授权的接口
sysResourceLambdaQueryWrapper.eq(SysResource::getRequiredPermissionFlag, YesOrNotEnum.Y.getCode());
@ -149,8 +150,7 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
LoginUserApi loginUserApi = LoginContext.me();
if (!loginUserApi.getSuperAdminFlag()) {
// 获取权限列表
List<Long> roleIds = loginUserApi.getLoginUser().getSimpleRoleInfoList().parallelStream().map(SimpleRoleInfo::getRoleId)
.collect(Collectors.toList());
List<Long> roleIds = loginUserApi.getLoginUser().getSimpleRoleInfoList().parallelStream().map(SimpleRoleInfo::getRoleId).collect(Collectors.toList());
Set<String> resourceCodeList = roleServiceApi.getRoleResourceCodeList(roleIds);
if (!resourceCodeList.isEmpty()) {
sysResourceLambdaQueryWrapper.in(SysResource::getResourceCode, resourceCodeList);
@ -234,13 +234,12 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
// 1. 获取所有的资源
LambdaQueryWrapper<SysResource> sysResourceLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysResourceLambdaQueryWrapper.eq(SysResource::getViewFlag, YesOrNotEnum.N.getCode());
sysResourceLambdaQueryWrapper.select(SysResource::getAppCode, SysResource::getModularCode, SysResource::getModularName, SysResource::getResourceCode,
SysResource::getUrl, SysResource::getResourceName);
sysResourceLambdaQueryWrapper.select(SysResource::getAppCode, SysResource::getModularCode, SysResource::getModularName, SysResource::getResourceCode, SysResource::getUrl,
SysResource::getResourceName);
// 查询条件
if (ObjectUtil.isNotEmpty(resourceRequest.getResourceName())) {
sysResourceLambdaQueryWrapper.like(SysResource::getUrl, resourceRequest.getResourceName()).or()
.like(SysResource::getResourceName, resourceRequest.getResourceName());
sysResourceLambdaQueryWrapper.like(SysResource::getUrl, resourceRequest.getResourceName()).or().like(SysResource::getResourceName, resourceRequest.getResourceName());
}
List<SysResource> allResource = this.list(sysResourceLambdaQueryWrapper);
@ -401,6 +400,19 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
return Convert.toInt(count);
}
@Override
public List<String> getTotalResourceCode(ResBizTypeEnum resBizTypeEnum) {
LambdaQueryWrapper<SysResource> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(SysResource::getResourceCode);
// 根据资源类型查询
queryWrapper.eq(ObjectUtil.isNotEmpty(resBizTypeEnum), SysResource::getResourceBizType, resBizTypeEnum.getCode());
List<SysResource> list = this.list(queryWrapper);
return list.stream().map(SysResource::getResourceCode).collect(Collectors.toList());
}
/**
* wrapper
*
@ -488,8 +500,7 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
* @author fengshuonan
* @date 2020/12/18 15:45
*/
private List<LayuiApiResourceTreeNode> createResourceTree(Map<String, Map<String, List<LayuiApiResourceTreeNode>>> appModularResources, Map<String,
String> modularCodeName) {
private List<LayuiApiResourceTreeNode> createResourceTree(Map<String, Map<String, List<LayuiApiResourceTreeNode>>> appModularResources, Map<String, String> modularCodeName) {
List<LayuiApiResourceTreeNode> finalTree = new ArrayList<>();

View File

@ -142,4 +142,16 @@ public class SysRoleAuthController {
return new SuccessResponseData<>();
}
/**
*
*
* @author fengshuonan
* @date 2021/8/10 18:23
*/
@PostResource(name = "角色绑定所有接口数据", path = "/sysRole/grantResourceV2/grantAll")
public ResponseData<?> grantResourceV2GrantAll(@RequestBody @Validated(SysRoleRequest.grantAll.class) SysRoleRequest sysRoleRequest) {
sysRoleResourceService.grantResourceV2GrantAll(sysRoleRequest);
return new SuccessResponseData<>();
}
}

View File

@ -81,4 +81,12 @@ public interface SysRoleResourceService extends IService<SysRoleResource> {
*/
void quickSaveAll(List<SysRoleResource> sysRoleResourceList);
/**
*
*
* @author fengshuonan
* @date 2022/9/29 14:05
*/
void grantResourceV2GrantAll(SysRoleRequest sysRoleRequest);
}

View File

@ -30,6 +30,8 @@ import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi;
import cn.stylefeng.roses.kernel.db.api.context.DbOperatorContext;
import cn.stylefeng.roses.kernel.rule.constants.RuleConstants;
import cn.stylefeng.roses.kernel.rule.enums.DbTypeEnum;
import cn.stylefeng.roses.kernel.rule.enums.ResBizTypeEnum;
import cn.stylefeng.roses.kernel.system.api.ResourceServiceApi;
import cn.stylefeng.roses.kernel.system.api.pojo.role.request.SysRoleRequest;
import cn.stylefeng.roses.kernel.system.modular.role.entity.SysRoleResource;
import cn.stylefeng.roses.kernel.system.modular.role.mapper.SysRoleResourceMapper;
@ -57,6 +59,9 @@ public class SysRoleResourceServiceImpl extends ServiceImpl<SysRoleResourceMappe
@Resource(name = "roleResourceCacheApi")
private CacheOperatorApi<List<String>> roleResourceCacheApi;
@Resource
private ResourceServiceApi resourceServiceApi;
@Override
@Transactional(rollbackFor = Exception.class)
public void grantResource(SysRoleRequest sysRoleRequest) {
@ -73,16 +78,7 @@ public class SysRoleResourceServiceImpl extends ServiceImpl<SysRoleResourceMappe
// 授权资源
List<String> grantResourceList = sysRoleRequest.getGrantResourceList();
ArrayList<SysRoleResource> sysRoleResources = new ArrayList<>();
// 批量保存角色授权资源
for (String resourceId : grantResourceList) {
SysRoleResource sysRoleMenu = new SysRoleResource();
sysRoleMenu.setRoleId(roleId);
sysRoleMenu.setResourceCode(resourceId);
sysRoleResources.add(sysRoleMenu);
}
this.saveBatch(sysRoleResources);
this.batchSaveResCodes(roleId, grantResourceList);
}
@Override
@ -161,4 +157,44 @@ public class SysRoleResourceServiceImpl extends ServiceImpl<SysRoleResourceMappe
}
}
@Override
public void grantResourceV2GrantAll(SysRoleRequest sysRoleRequest) {
// 删除角色绑定的所有资源
this.deleteRoleResourceListByRoleId(sysRoleRequest.getRoleId());
// 获取是全部选中,还是全部取消,如果是全部取消,则直接返回
if (!sysRoleRequest.getTotalSelectFlag()) {
return;
}
// 如果是全部选中,则查询一共有多少资源,将角色赋予全部资源
ResBizTypeEnum resBizTypeEnum = null;
if (ObjectUtil.isNotEmpty(sysRoleRequest.getResourceBizType())) {
resBizTypeEnum = ResBizTypeEnum.DEFAULT.parseToEnum(sysRoleRequest.getResourceBizType().toString());
}
List<String> totalResourceCode = resourceServiceApi.getTotalResourceCode(resBizTypeEnum);
this.batchSaveResCodes(sysRoleRequest.getRoleId(), totalResourceCode);
}
/**
*
*
* @author fengshuonan
* @date 2022/9/29 14:34
*/
private void batchSaveResCodes(Long roleId, List<String> totalResourceCode) {
ArrayList<SysRoleResource> sysRoleResourceList = new ArrayList<>();
if (ObjectUtil.isNotEmpty(totalResourceCode)) {
for (String resCode : totalResourceCode) {
SysRoleResource sysRoleResource = new SysRoleResource();
sysRoleResource.setRoleId(roleId);
sysRoleResource.setResourceCode(resCode);
sysRoleResourceList.add(sysRoleResource);
}
this.saveBatch(sysRoleResourceList);
}
}
}