实现接口:根据身份id和身份类型查询角色、权限集、权限

This commit is contained in:
chenweiwei 2023-09-09 23:02:46 +08:00
parent 6885458035
commit a25a245b9b
19 changed files with 319 additions and 40 deletions

View File

@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.RequestParam;
/**
* 角色
*/
@FeignClient(name = "tyr", url = "${axzo.service.maokai:http://tyr:8080/api/saasRole}")
@FeignClient(name = "tyr", url = "${axzo.service.maokai:http://tyr:8080}")
public interface SaasRoleApi {
/**
@ -21,25 +21,25 @@ public interface SaasRoleApi {
* 标准角worksaceId ouId = -1,自定义跟随自定义分组赋值
* 如果权限列表不为空则创建通用权限
*/
@PostMapping("saveOrUpdate")
@PostMapping("/api/saasRole/saveOrUpdate")
ApiResult saveOrUpdate(@RequestBody SaasRoleVO req);
/**
* 根据id查询详情
*/
@PostMapping("getById")
@PostMapping("/api/saasRole/getById")
ApiResult<SaasRoleVO> getById(@RequestParam(required = true) Long id);
/**
* 获取角色列表
*/
@PostMapping("query")
@PostMapping("/api/saasRole/query")
ApiListResult<SaasRoleVO> query(@RequestBody QuerySaasRoleReq req);
/**
* 根据身份id 身份类型查询权限列表
*/
@GetMapping("queryByIdentityIdType")
@GetMapping("/api/saasRole/queryByIdentityIdType")
ApiListResult<SaasRoleVO> queryByIdentityIdType(@RequestParam(required = true) Long identityId,@RequestParam(required = true) Integer identityType);
}

View File

@ -2,17 +2,23 @@ package cn.axzo.tyr.client.model.req;
import cn.axzo.basics.common.page.PageRequest;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class QuerySaasPermissionGroupReq extends PageRequest {
/**
* 角色id
*/
private Long roleId;
private List<Long> roleIds;
/**
* 权限组id
@ -24,6 +30,11 @@ public class QuerySaasPermissionGroupReq extends PageRequest {
*/
private String name;
/**
* 是否为通用权限集 1: 0:
*/
private Integer isCommon;
/**
* 创建者
*/

View File

@ -1,5 +1,6 @@
package cn.axzo.tyr.client.model.vo;
import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
@ -46,8 +47,8 @@ public class SaasPermissionGroupVO {
private String type;
/**
* 权限id
* 权限
*/
private List<Long> featureIds;
private List<PermissionPointTreeNode> feature;
}

View File

@ -35,6 +35,11 @@ public class SaasRoleGroupVO {
*/
private String name;
/**
* 角色
*/
private List<SaasRoleVO> role;
/**
* 排序
*/

View File

@ -1,11 +1,18 @@
package cn.axzo.tyr.client.model.vo;
import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class SaasRoleVO {
private Long id;
@ -31,19 +38,14 @@ public class SaasRoleVO {
private Long updateBy;
/**
* 分组id
* 分组id(这个关联关系应该放在上一级从结构上看上下级是多对多的如果放在下级返回上级的id不太合适)
*/
private List<Long> roleGroupIds;
// private List<Long> roleGroupIds;
/**
* 权限组id
* 权限组
*/
private List<Long> permissionGroupIds;
/**
* 权限id
*/
private List<Long> featureIds;
private List<SaasPermissionGroupVO> permissionGroup;
/**
* 是否删除

View File

@ -43,12 +43,6 @@
<groupId>cn.axzo.framework</groupId>
<artifactId>axzo-processor-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>cn.axzo.basics</groupId>
<artifactId>basics-common</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>

View File

@ -13,9 +13,7 @@ import org.springframework.scheduling.annotation.EnableAsync;
@Slf4j
@EnableAsync
@EnableDiscoveryClient
@EnableFeignClients(basePackages = {
"cn.axzo.data.collection.api",
})
//@EnableFeignClients
@MapperScan(value = {"cn.axzo.tyr.server.repository.mapper"})
@SpringBootApplication(scanBasePackages = "cn.axzo")
public class TyrApplication {

View File

@ -51,7 +51,6 @@ public class SaasRoleController implements SaasRoleApi {
@Override
public ApiListResult<SaasRoleVO> queryByIdentityIdType(Long identityId, Integer identityType) {
// 根据身份id和身份类型查询 用户角色关联表
return roleService.queryByIdentityIdType(identityId, identityType);
return ApiListResult.ok(roleService.queryByIdentityIdType(identityId, identityType));
}
}

View File

@ -22,11 +22,11 @@ import java.io.Serializable;
@TableName("saas_permission_group")
public class SaasPermissionGroup extends BaseEntity<SaasPermissionGroup> {
/**
* 权限集名称
*/
private String name;
/**
* 权限集描述
*/

View File

@ -0,0 +1,56 @@
package cn.axzo.tyr.server.repository.entity;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
/**
* 权限集功能中间表(SaasPgroupPermissionRelation)表实体类
*
* @author makejava
* @since 2022-05-24 11:18:41
*/
@Getter
@Setter
@ToString
@EqualsAndHashCode(callSuper = true)
@TableName("saas_pgroup_permission_relation")
public class SaasPgroupPermissionRelation extends BaseEntity<SaasPgroupPermissionRelation> {
/**
* 权限集id
*/
private Long groupId;
/**
* 功能id
*/
private Long featureId;
/**
* 创建者
*/
private Long createBy;
/**
* 更新者
*/
private Long updateBy;
/**
* 获取主键值
*
* @return 主键值
*/
@Override
protected Serializable pkVal() {
return this.id;
}
}

View File

@ -31,7 +31,7 @@ public class SaasRoleUserRelation extends BaseEntity<SaasRoleUserRelation> {
/**
* 身份类型 1:工人 2:从业人员 3:班组长 4:运营人员 5:政务人员
*/
private IdentityType identityType;
private Integer identityType;
/**
* 角色Id

View File

@ -0,0 +1,12 @@
package cn.axzo.tyr.server.repository.mapper;
import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation;
import cn.axzo.tyr.server.repository.entity.SaasRole;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface SaasPgroupPermissionRelationMapper extends BaseMapper<SaasPgroupPermissionRelation> {
}

View File

@ -0,0 +1,14 @@
package cn.axzo.tyr.server.repository.service;
import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation;
import cn.axzo.tyr.server.repository.entity.SaasRole;
import cn.axzo.tyr.server.repository.mapper.SaasPgroupPermissionRelationMapper;
import cn.axzo.tyr.server.repository.mapper.SaasRoleMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Repository;
@Repository
public class SaasPgroupPermissionRelationDao extends ServiceImpl<SaasPgroupPermissionRelationMapper, SaasPgroupPermissionRelation> {
}

View File

@ -0,0 +1,24 @@
package cn.axzo.tyr.server.service;
import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq;
import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO;
import java.util.List;
/**
* 角色
*
* @version V1.0
* @author: ZhanSiHu
* @date: 2023/9/6 15:51
*/
public interface PermissionGroupService {
/**
* 通用查询
*/
public List<SaasPermissionGroupVO> query(QuerySaasPermissionGroupReq req);
}

View File

@ -4,6 +4,7 @@ import cn.axzo.tyr.client.model.permission.PermissionPointDTO;
import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode;
import cn.axzo.tyr.client.model.permission.PermissionPointTreeQueryReq;
import cn.axzo.tyr.client.model.permission.PermissionPointVO;
import cn.axzo.tyr.server.repository.entity.SaasFeature;
import java.util.List;
@ -42,4 +43,5 @@ public interface PermissionPointService {
/** 移动排序 **/
void updateSort(Long updater, Long permissionId, Integer direction);
}

View File

@ -3,6 +3,8 @@ package cn.axzo.tyr.server.service;
import cn.axzo.framework.domain.web.result.ApiListResult;
import cn.axzo.tyr.client.model.vo.SaasRoleVO;
import java.util.List;
/**
* 角色
*
@ -13,5 +15,5 @@ import cn.axzo.tyr.client.model.vo.SaasRoleVO;
public interface RoleService {
ApiListResult<SaasRoleVO> queryByIdentityIdType(Long identityId, Integer identityType);
List<SaasRoleVO> queryByIdentityIdType(Long identityId, Integer identityType);
}

View File

@ -0,0 +1,100 @@
package cn.axzo.tyr.server.service.impl;
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode;
import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq;
import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO;
import cn.axzo.tyr.server.repository.entity.SaasPermissionGroup;
import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation;
import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation;
import cn.axzo.tyr.server.repository.service.SaasPermissionGroupDao;
import cn.axzo.tyr.server.repository.service.SaasPgroupPermissionRelationDao;
import cn.axzo.tyr.server.repository.service.SaasPgroupRoleRelationDao;
import cn.axzo.tyr.server.service.PermissionGroupService;
import cn.axzo.tyr.server.service.PermissionPointService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 权限集
*
* @version V1.0
* @author: ZhanSiHu
* @date: 2023/9/6 15:51
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class PermissionGroupImpl implements PermissionGroupService {
@Autowired
SaasPermissionGroupDao permissionGroupDao;
@Autowired
SaasPgroupRoleRelationDao roleRelationDao;
@Autowired
SaasPgroupPermissionRelationDao permissionRelationDao;
@Autowired
PermissionPointService featureService;
@Override
public List<SaasPermissionGroupVO> query(QuerySaasPermissionGroupReq req) {
// 如果角色id不为空则先查询角色权限集关联表
List<SaasPgroupRoleRelation> relationList = null;
if (CollectionUtils.isNotEmpty(req.getRoleIds())) {
relationList = roleRelationDao.lambdaQuery()
.in(SaasPgroupRoleRelation::getRoleId, req.getRoleIds())
.eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value)
.list();
// 如果没查询到关联关系则直接返回
if (CollectionUtils.isEmpty(relationList)) {
return new ArrayList<>();
}
}
// 查询权限集
List<SaasPermissionGroup> groupList = permissionGroupDao.lambdaQuery()
.in(CollectionUtils.isNotEmpty(req.getIds()), BaseEntity::getId, req.getIds())
.eq(req.getIsCommon() != null, SaasPermissionGroup::getIsCommon, req.getIsCommon())
.eq(req.getCreateBy() != null, SaasPermissionGroup::getCreateBy, req.getCreateBy())
.eq(req.getUpdateBy() != null, SaasPermissionGroup::getUpdateBy, req.getUpdateBy())
.eq(StringUtils.isNotBlank(req.getType()), SaasPermissionGroup::getType, req.getType())
.eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value)
.orderByDesc(BaseEntity::getId)
.list();
// 如果权限集为空则直接返回
if (CollectionUtils.isEmpty(groupList)) {
return new ArrayList<>();
}
// 查询权限集关联的权限
List<SaasPgroupPermissionRelation> permissionList = permissionRelationDao.lambdaQuery()
.in(SaasPgroupPermissionRelation::getGroupId, groupList.stream().map(BaseEntity::getId).collect(Collectors.toList()))
.eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value)
.list();
List<PermissionPointTreeNode> feature = null;
if (CollectionUtils.isNotEmpty(permissionList)) {
// 查询featureCode
feature = featureService.listNodesByIds(permissionList.stream().map(SaasPgroupPermissionRelation::getFeatureId).collect(Collectors.toList()));
}
// 组装填充字段
List<PermissionPointTreeNode> finalFeature = feature;
return groupList.stream().map(group ->
SaasPermissionGroupVO.builder()
.id(group.getId())
.name(group.getName())
.feature(finalFeature)
.createBy(group.getCreateBy())
.updateBy(group.getUpdateBy())
.type(group.getType())
.build()
).collect(Collectors.toList());
}
}

View File

@ -4,6 +4,7 @@ import cn.axzo.basics.common.BeanMapper;
import cn.axzo.basics.common.util.TreeUtil;
import cn.axzo.framework.domain.web.BizException;
import cn.axzo.framework.domain.web.code.BaseCode;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.client.model.enums.FeatureType;
import cn.axzo.tyr.client.model.permission.PermissionPointDTO;
import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode;
@ -130,7 +131,7 @@ public class PermissionPointServiceImpl implements PermissionPointService {
@Override
public List<PermissionPointTreeNode> listNodesByIds(List<Long> permissionIds) {
if (CollectionUtil.isEmpty(permissionIds)) {
return null;
return new ArrayList<>();
}
return this.saasFeatureDao.listByIds(permissionIds)
.stream()
@ -296,7 +297,6 @@ public class PermissionPointServiceImpl implements PermissionPointService {
this.saasFeatureDao.updateSort(sortedChildren.get(switchIndex).getId(), index);
}
private PermissionPointTreeNode feature2Node(SaasFeature feature) {
PermissionPointTreeNode node = new PermissionPointTreeNode();
node.setPermissionPointId(feature.getId());

View File

@ -1,18 +1,27 @@
package cn.axzo.tyr.server.service.impl;
import cn.axzo.framework.domain.web.result.ApiListResult;
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.client.model.permission.PermissionPointTreeNode;
import cn.axzo.tyr.client.model.req.QuerySaasPermissionGroupReq;
import cn.axzo.tyr.client.model.vo.SaasPermissionGroupVO;
import cn.axzo.tyr.client.model.vo.SaasRoleVO;
import cn.axzo.tyr.server.repository.entity.SaasPgroupRoleRelation;
import cn.axzo.tyr.server.repository.entity.SaasRole;
import cn.axzo.tyr.server.repository.entity.SaasRoleUserRelation;
import cn.axzo.tyr.server.repository.service.SaasPgroupRoleRelationDao;
import cn.axzo.tyr.server.repository.service.SaasRoleDao;
import cn.axzo.tyr.server.repository.service.SaasRoleUserRelationDao;
import cn.axzo.tyr.server.service.PermissionGroupService;
import cn.axzo.tyr.server.service.RoleService;
import cn.hutool.core.bean.BeanUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -31,12 +40,62 @@ public class RoleServiceImpl implements RoleService {
SaasRoleUserRelationDao roleUserRelationDao;
@Autowired
SaasRoleDao saasRoleDao;
@Autowired
PermissionGroupService permissionGroupService;
@Autowired
SaasPgroupRoleRelationDao permissionGroupRelation;
@Override
public ApiListResult<SaasRoleVO> queryByIdentityIdType(Long identityId, Integer identityType) {
public List<SaasRoleVO> queryByIdentityIdType(Long identityId, Integer identityType) {
// 查询人关联的角色id
Set<Long> roleIds = roleUserRelationDao.queryByIdentityIdType(identityId, identityType).stream().map(SaasRoleUserRelation::getRoleId).collect(Collectors.toSet());
// 根据角色列表查询角色列表
return ApiListResult.ok(null);
List<Long> roleIds = roleUserRelationDao.queryByIdentityIdType(identityId, identityType).stream().map(SaasRoleUserRelation::getRoleId).collect(Collectors.toList());
if (CollectionUtils.isEmpty(roleIds)) {
return new ArrayList<>();
}
// 查询角色信息
List<SaasRole> roles = saasRoleDao.lambdaQuery().in(BaseEntity::getId, roleIds).list();
// 查询权限集关联关系
List<SaasPgroupRoleRelation> saasPgroupRoleRelations = queryPermissionGroupRelation(roleIds);
// 查询权限集
Map<Long, List<SaasPgroupRoleRelation>> pgrouRelationMap = null;
Map<Long, List<SaasPermissionGroupVO>> pGroupMap = null;
if (CollectionUtils.isNotEmpty(saasPgroupRoleRelations)) {
// 转map<roleId,relation>
pgrouRelationMap = saasPgroupRoleRelations.stream().collect(Collectors.groupingBy(SaasPgroupRoleRelation::getRoleId));
// 查询权限集
pGroupMap = permissionGroupService.query(QuerySaasPermissionGroupReq.builder()
.ids(saasPgroupRoleRelations.stream().map(SaasPgroupRoleRelation::getGroupId).collect(Collectors.toList()))
.build())
// 转map<pgroupId>
.stream().collect(Collectors.groupingBy(SaasPermissionGroupVO::getId));
}
Map<Long, List<SaasPgroupRoleRelation>> finalPgrouRelationMap = pgrouRelationMap;
Map<Long, List<SaasPermissionGroupVO>> finalPGroupMap = pGroupMap;
return roles.stream().map(role -> {
// 获取对应的权限集
List<SaasPermissionGroupVO> pGroup = new ArrayList<>();
if(finalPgrouRelationMap != null && finalPgrouRelationMap.containsKey(role.getId())) {
pGroup = finalPgrouRelationMap.get(role.getId())
.stream()
.map(SaasPgroupRoleRelation::getGroupId)
.map(finalPGroupMap::get)
.filter(Objects::nonNull)
.flatMap(List::stream)
.collect(Collectors.toList());
}
SaasRoleVO saasRoleVO = BeanUtil.copyProperties(role, SaasRoleVO.class);
saasRoleVO.setPermissionGroup(pGroup);
return saasRoleVO;
}).collect(Collectors.toList());
}
/**
* 根据角色id查询权限集关联关系
*/
public List<SaasPgroupRoleRelation> queryPermissionGroupRelation(List<Long> roleIds) {
return permissionGroupRelation.lambdaQuery()
.in(SaasPgroupRoleRelation::getRoleId, roleIds)
.eq(BaseEntity::getIsDelete, TableIsDeleteEnum.NORMAL.value)
.list();
}
}