mirror of https://gitee.com/stylefeng/roses
【7.2.5】【role】更新角色绑定所有资源
parent
2eb6f0f7ec
commit
f118bf4342
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
|
@ -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<>();
|
||||
|
||||
|
|
|
@ -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<>();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue