mirror of https://gitee.com/stylefeng/roses
【7.2.5】【role】角色资源表增加一个类型
parent
b290b2facb
commit
293a2a4fdf
|
@ -27,6 +27,7 @@ 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 cn.stylefeng.roses.kernel.system.api.pojo.role.dto.SysRoleResourceDTO;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
@ -75,6 +76,14 @@ public interface ResourceServiceApi {
|
|||
* @author fengshuonan
|
||||
* @date 2022/9/29 14:27
|
||||
*/
|
||||
List<String> getTotalResourceCode(ResBizTypeEnum resBizTypeEnum);
|
||||
List<SysRoleResourceDTO> getTotalResourceCode(ResBizTypeEnum resBizTypeEnum);
|
||||
|
||||
/**
|
||||
* 获取资源编码对应的资源类型
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2022/10/1 14:29
|
||||
*/
|
||||
Integer getResourceBizTypeByCode(String resCode);
|
||||
|
||||
}
|
||||
|
|
|
@ -53,4 +53,9 @@ public class SysRoleResourceDTO extends BaseEntity {
|
|||
*/
|
||||
private String resourceCode;
|
||||
|
||||
/**
|
||||
* 资源的类型,1-业务类,2-系统类
|
||||
*/
|
||||
private Integer resourceBizType;
|
||||
|
||||
}
|
||||
|
|
|
@ -401,16 +401,38 @@ public class SysResourceServiceImpl extends ServiceImpl<SysResourceMapper, SysRe
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<String> getTotalResourceCode(ResBizTypeEnum resBizTypeEnum) {
|
||||
public List<SysRoleResourceDTO> getTotalResourceCode(ResBizTypeEnum resBizTypeEnum) {
|
||||
|
||||
LambdaQueryWrapper<SysResource> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.select(SysResource::getResourceCode);
|
||||
queryWrapper.select(SysResource::getResourceCode, SysResource::getResourceBizType);
|
||||
|
||||
// 根据资源类型查询
|
||||
queryWrapper.eq(ObjectUtil.isNotEmpty(resBizTypeEnum), SysResource::getResourceBizType, resBizTypeEnum.getCode());
|
||||
|
||||
List<SysResource> list = this.list(queryWrapper);
|
||||
return list.stream().map(SysResource::getResourceCode).collect(Collectors.toList());
|
||||
|
||||
ArrayList<SysRoleResourceDTO> results = new ArrayList<>();
|
||||
for (SysResource sysResource : list) {
|
||||
SysRoleResourceDTO sysRoleResourceDTO = new SysRoleResourceDTO();
|
||||
sysRoleResourceDTO.setResourceCode(sysResource.getResourceCode());
|
||||
sysRoleResourceDTO.setResourceBizType(sysResource.getResourceBizType());
|
||||
results.add(sysRoleResourceDTO);
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getResourceBizTypeByCode(String resCode) {
|
||||
LambdaQueryWrapper<SysResource> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.select(SysResource::getResourceBizType);
|
||||
queryWrapper.eq(SysResource::getResourceCode, resCode);
|
||||
SysResource one = this.getOne(queryWrapper, false);
|
||||
if (one == null) {
|
||||
return ResBizTypeEnum.DEFAULT.getCode();
|
||||
} else {
|
||||
return one.getResourceBizType();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -59,4 +59,10 @@ public class SysRoleResource extends BaseEntity {
|
|||
@TableField("resource_code")
|
||||
private String resourceCode;
|
||||
|
||||
/**
|
||||
* 资源的业务类型:1-业务类型,2-系统类型
|
||||
*/
|
||||
@TableField("resource_biz_type")
|
||||
private Integer resourceBizType;
|
||||
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
*/
|
||||
package cn.stylefeng.roses.kernel.system.modular.role.service;
|
||||
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.role.dto.SysRoleResourceDTO;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.role.request.SysRoleRequest;
|
||||
import cn.stylefeng.roses.kernel.system.modular.role.entity.SysRoleResource;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
@ -67,11 +68,12 @@ public interface SysRoleResourceService extends IService<SysRoleResource> {
|
|||
/**
|
||||
* 根据角色id删除对应的角色资源信息
|
||||
*
|
||||
* @param roleId 角色id
|
||||
* @param roleId 角色id
|
||||
* @param resourceBizType 指定的资源类型,如果为空,则删除所有类型的
|
||||
* @author majianguo
|
||||
* @date 2020/11/5 上午11:18
|
||||
*/
|
||||
void deleteRoleResourceListByRoleId(Long roleId);
|
||||
void deleteRoleResourceListByRoleId(Long roleId, Integer resourceBizType);
|
||||
|
||||
/**
|
||||
* 保存所有的角色资源
|
||||
|
@ -87,6 +89,6 @@ public interface SysRoleResourceService extends IService<SysRoleResource> {
|
|||
* @author fengshuonan
|
||||
* @date 2022/9/29 14:34
|
||||
*/
|
||||
void batchSaveResCodes(Long roleId, List<String> totalResourceCode);
|
||||
void batchSaveResCodes(Long roleId, List<SysRoleResourceDTO> totalResourceCode);
|
||||
|
||||
}
|
||||
|
|
|
@ -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.system.api.ResourceServiceApi;
|
||||
import cn.stylefeng.roses.kernel.system.api.pojo.role.dto.SysRoleResourceDTO;
|
||||
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) {
|
||||
|
@ -72,8 +77,14 @@ public class SysRoleResourceServiceImpl extends ServiceImpl<SysRoleResourceMappe
|
|||
roleResourceCacheApi.remove(String.valueOf(roleId));
|
||||
|
||||
// 授权资源
|
||||
List<String> grantResourceList = sysRoleRequest.getGrantResourceList();
|
||||
this.batchSaveResCodes(roleId, grantResourceList);
|
||||
List<String> codeList = sysRoleRequest.getGrantResourceList();
|
||||
List<SysRoleResourceDTO> list = new ArrayList<>();
|
||||
for (String resCode : codeList) {
|
||||
SysRoleResourceDTO sysRoleResourceDTO = new SysRoleResourceDTO();
|
||||
sysRoleResourceDTO.setResourceCode(resCode);
|
||||
list.add(sysRoleResourceDTO);
|
||||
}
|
||||
this.batchSaveResCodes(roleId, list);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -95,6 +106,7 @@ public class SysRoleResourceServiceImpl extends ServiceImpl<SysRoleResourceMappe
|
|||
SysRoleResource sysRoleResource = new SysRoleResource();
|
||||
sysRoleResource.setRoleId(sysRoleRequest.getRoleId());
|
||||
sysRoleResource.setResourceCode(resourceCode);
|
||||
sysRoleResource.setResourceBizType(resourceServiceApi.getResourceBizTypeByCode(resourceCode));
|
||||
sysRoleResources.add(sysRoleResource);
|
||||
}
|
||||
this.saveBatch(sysRoleResources, sysRoleResources.size());
|
||||
|
@ -128,9 +140,10 @@ public class SysRoleResourceServiceImpl extends ServiceImpl<SysRoleResourceMappe
|
|||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteRoleResourceListByRoleId(Long roleId) {
|
||||
public void deleteRoleResourceListByRoleId(Long roleId, Integer resourceBizType) {
|
||||
LambdaQueryWrapper<SysRoleResource> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(SysRoleResource::getRoleId, roleId);
|
||||
queryWrapper.eq(ObjectUtil.isNotEmpty(resourceBizType), SysRoleResource::getResourceBizType, resourceBizType);
|
||||
this.remove(queryWrapper);
|
||||
|
||||
// 清除角色绑定的资源缓存
|
||||
|
@ -159,14 +172,15 @@ public class SysRoleResourceServiceImpl extends ServiceImpl<SysRoleResourceMappe
|
|||
* @date 2022/9/29 14:34
|
||||
*/
|
||||
@Override
|
||||
public void batchSaveResCodes(Long roleId, List<String> totalResourceCode) {
|
||||
public void batchSaveResCodes(Long roleId, List<SysRoleResourceDTO> totalResource) {
|
||||
ArrayList<SysRoleResource> sysRoleResourceList = new ArrayList<>();
|
||||
|
||||
if (ObjectUtil.isNotEmpty(totalResourceCode)) {
|
||||
for (String resCode : totalResourceCode) {
|
||||
if (ObjectUtil.isNotEmpty(totalResource)) {
|
||||
for (SysRoleResourceDTO resCode : totalResource) {
|
||||
SysRoleResource sysRoleResource = new SysRoleResource();
|
||||
sysRoleResource.setRoleId(roleId);
|
||||
sysRoleResource.setResourceCode(resCode);
|
||||
sysRoleResource.setResourceCode(resCode.getResourceCode());
|
||||
sysRoleResource.setResourceBizType(resCode.getResourceBizType());
|
||||
sysRoleResourceList.add(sysRoleResource);
|
||||
}
|
||||
this.saveBatch(sysRoleResourceList);
|
||||
|
|
|
@ -158,7 +158,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
|||
userServiceApi.deleteUserRoleListByRoleId(roleId);
|
||||
|
||||
// 级联删除该角色对应的角色-菜单表关联信息
|
||||
sysRoleResourceService.deleteRoleResourceListByRoleId(roleId);
|
||||
sysRoleResourceService.deleteRoleResourceListByRoleId(roleId, null);
|
||||
|
||||
// 删除角色缓存信息
|
||||
roleInfoCacheApi.remove(String.valueOf(roleId));
|
||||
|
@ -174,7 +174,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
|||
public void grantResourceV2GrantAll(SysRoleRequest sysRoleRequest) {
|
||||
|
||||
// 删除角色绑定的所有资源
|
||||
this.sysRoleResourceService.deleteRoleResourceListByRoleId(sysRoleRequest.getRoleId());
|
||||
this.sysRoleResourceService.deleteRoleResourceListByRoleId(sysRoleRequest.getRoleId(), sysRoleRequest.getResourceBizType());
|
||||
|
||||
// 获取是全部选中,还是全部取消,如果是全部取消,则直接返回
|
||||
if (!sysRoleRequest.getTotalSelectFlag()) {
|
||||
|
@ -186,7 +186,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
|||
if (ObjectUtil.isNotEmpty(sysRoleRequest.getResourceBizType())) {
|
||||
resBizTypeEnum = ResBizTypeEnum.DEFAULT.parseToEnum(sysRoleRequest.getResourceBizType().toString());
|
||||
}
|
||||
List<String> totalResourceCode = resourceServiceApi.getTotalResourceCode(resBizTypeEnum);
|
||||
List<SysRoleResourceDTO> totalResourceCode = resourceServiceApi.getTotalResourceCode(resBizTypeEnum);
|
||||
this.sysRoleResourceService.batchSaveResCodes(sysRoleRequest.getRoleId(), totalResourceCode);
|
||||
}
|
||||
|
||||
|
|
|
@ -79,14 +79,15 @@ public class InitAdminService {
|
|||
|
||||
// 找到所有Resource,将所有资源赋给这个角色
|
||||
LambdaQueryWrapper<SysResource> sysResourceLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
sysResourceLambdaQueryWrapper.select(SysResource::getResourceCode);
|
||||
sysResourceLambdaQueryWrapper.select(SysResource::getResourceCode, SysResource::getResourceBizType);
|
||||
List<SysResource> resources = sysResourceService.list(sysResourceLambdaQueryWrapper);
|
||||
|
||||
ArrayList<SysRoleResource> sysRoleResources = new ArrayList<>();
|
||||
for (SysResource resource : resources) {
|
||||
SysRoleResource sysRoleResource = new SysRoleResource();
|
||||
sysRoleResource.setResourceCode(resource.getResourceCode());
|
||||
sysRoleResource.setRoleId(superAdminRole.getRoleId());
|
||||
sysRoleResource.setResourceCode(resource.getResourceCode());
|
||||
sysRoleResource.setResourceBizType(resource.getResourceBizType());
|
||||
sysRoleResources.add(sysRoleResource);
|
||||
}
|
||||
sysRoleResourceService.quickSaveAll(sysRoleResources);
|
||||
|
|
Loading…
Reference in New Issue