fix(REQ-2545): 记录菜单绑定角色关系的日志

This commit is contained in:
李昆鹏 2024-07-24 21:10:38 +08:00
parent 2efcaf9634
commit 45e01d07bd
7 changed files with 118 additions and 20 deletions

View File

@ -28,6 +28,11 @@ public enum PermissionRelationOperateLogSceneEnum {
*/
OMS_ROLE_BIND_FEATURE_RESOURCE("OMS_ROLE_BIND_FEATURE_RESOURCE", "oms后台更新角色绑定的资源"),
/**
* oms后台更新资源绑定的页面元素
*/
OMS_FEATURE_RESOURCE_BIND_ELEMENT("OMS_FEATURE_RESOURCE_BIND_ELEMENT", "oms后台更新资源绑定的页面元素"),
;
@EnumValue

View File

@ -0,0 +1,30 @@
package cn.axzo.tyr.server.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @author likunpeng
* @version 1.0
* @date 2024/7/24
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RelationOperateLogResourceBindElementDO {
/**
* 资源编码
*/
private String uniCode;
/**
* 页面元素code列表
*/
private List<String> featureCodes;
}

View File

@ -16,12 +16,12 @@ import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SaasPgroupPermissionRelationOperateLogOperateDO {
public class RelationOperateLogResourceBindRoleDO {
/**
* 资源编码
*/
private List<String> featureCodes;
private String uniCode;
/**
* 角色code列表

View File

@ -0,0 +1,30 @@
package cn.axzo.tyr.server.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @author likunpeng
* @version 1.0
* @date 2024/7/24
*/
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RelationOperateLogRoleBindResourceDO {
/**
* 资源编码
*/
private List<String> uniCodes;
/**
* 角色code
*/
private String roleCode;
}

View File

@ -12,7 +12,7 @@ import cn.axzo.tyr.client.model.req.GetFeatureResourceTreeReq;
import cn.axzo.tyr.client.model.req.ResourceSyncReq;
import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode;
import cn.axzo.tyr.server.inner.feign.BaseFeatureResourceApi;
import cn.axzo.tyr.server.model.SaasPgroupPermissionRelationOperateLogOperateDO;
import cn.axzo.tyr.server.model.RelationOperateLogResourceBindRoleDO;
import cn.axzo.tyr.server.repository.dao.SaasFeatureResourceDao;
import cn.axzo.tyr.server.repository.dao.SaasPageElementFeatureResourceRelationDao;
import cn.axzo.tyr.server.repository.dao.SaasPgroupPermissionRelationDao;
@ -126,7 +126,7 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
}
private void doSyncFromBase(ResourceSyncReq req) {
List<SaasPgroupPermissionRelationOperateLogOperateDO> operateDos = Lists.newCopyOnWriteArrayList();
List<RelationOperateLogResourceBindRoleDO> operateDos = Lists.newCopyOnWriteArrayList();
//TODO:@Zhan 并发处理同一个parent下同批查询
//处理数据缓存避免同级节点上级重复处理 - 上级code查询
final Map<Long, String> codeCache = new ConcurrentHashMap<>();
@ -172,7 +172,7 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
return featureResourceIdCodeMap;
}
private void syncResourceProcess(List<FeatureResourceTreeNode> syncList, Map<Long, String> codeCache, Long operatorId, List<SaasPgroupPermissionRelationOperateLogOperateDO> operateDos) {
private void syncResourceProcess(List<FeatureResourceTreeNode> syncList, Map<Long, String> codeCache, Long operatorId, List<RelationOperateLogResourceBindRoleDO> operateDos) {
for (FeatureResourceTreeNode treeNode : syncList) {
if (codeCache.containsKey(treeNode.getId())) {
@ -243,7 +243,7 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
}
}
private void doFeatureResourceRole(SaasFeatureResource featureResource, List<String> roleCodes, Long operatorId, List<SaasPgroupPermissionRelationOperateLogOperateDO> operateDos) {
private void doFeatureResourceRole(SaasFeatureResource featureResource, List<String> roleCodes, Long operatorId, List<RelationOperateLogResourceBindRoleDO> operateDos) {
if (Objects.isNull(featureResource)) {
return;
}
@ -260,8 +260,8 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
}
// 操作日志
operateDos.add(SaasPgroupPermissionRelationOperateLogOperateDO.builder()
.featureCodes(Lists.newArrayList(featureResource.getUniCode()))
operateDos.add(RelationOperateLogResourceBindRoleDO.builder()
.uniCode(featureResource.getUniCode())
.roleCodes(roleCodes)
.build());
@ -355,7 +355,7 @@ public class FeatureResourceSyncServiceImpl implements FeatureResourceSyncServic
}
private void saveOperateLog(ResourceSyncReq req, List<SaasPgroupPermissionRelationOperateLogOperateDO> operateDos) {
private void saveOperateLog(ResourceSyncReq req, List<RelationOperateLogResourceBindRoleDO> operateDos) {
List<PersonProfileDto> personProfileDtos = RpcInternalUtil.rpcListProcessor(() -> userProfileServiceApi.getPersonProfiles(Lists.newArrayList(req.getOperatorId())), "查询用户信息", req.getOperatorId()).getData();
PersonProfileDto operator = CollectionUtils.isEmpty(personProfileDtos) ? null : personProfileDtos.get(0);

View File

@ -1503,8 +1503,8 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
List<PersonProfileDto> personProfileDtos = RpcInternalUtil.rpcListProcessor(() -> userProfileServiceApi.getPersonProfiles(Lists.newArrayList(operatorId)), "查询用户信息", operatorId).getData();
PersonProfileDto operator = org.apache.commons.collections4.CollectionUtils.isEmpty(personProfileDtos) ? null : personProfileDtos.get(0);
SaasPgroupPermissionRelationOperateLogOperateDO operateAfter = SaasPgroupPermissionRelationOperateLogOperateDO.builder()
.featureCodes(Lists.newArrayList(saasFeatureResource.getUniCode()))
RelationOperateLogResourceBindRoleDO operateAfter = RelationOperateLogResourceBindRoleDO.builder()
.uniCode(saasFeatureResource.getUniCode())
.build();
SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder()
.scene(PermissionRelationOperateLogSceneEnum.OMS_FEATURE_RESOURCE_BIND_ROLE.getValue())
@ -1528,8 +1528,8 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
PersonProfileDto operator = org.apache.commons.collections4.CollectionUtils.isEmpty(personProfileDtos) ? null : personProfileDtos.get(0);
List<SaasRole> saasRoles = saasRoleDao.lambdaQuery().in(BaseEntity::getId, roleIds).list();
SaasPgroupPermissionRelationOperateLogOperateDO operateAfter = SaasPgroupPermissionRelationOperateLogOperateDO.builder()
.featureCodes(Lists.newArrayList(saasFeatureResource.getUniCode()))
RelationOperateLogResourceBindRoleDO operateAfter = RelationOperateLogResourceBindRoleDO.builder()
.uniCode(saasFeatureResource.getUniCode())
.roleCodes(saasRoles.stream().map(SaasRole::getRoleCode).collect(Collectors.toList()))
.build();
SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder()
@ -1552,9 +1552,9 @@ public class RoleServiceImpl extends ServiceImpl<SaasRoleMapper, SaasRole>
uniCodes = saasFeatureResourceDao.lambdaQuery().in(BaseEntity::getId, saveOrUpdateRole.getPermissionIds()).list().stream().map(SaasFeatureResource::getUniCode).collect(Collectors.toList());
}
SaasPgroupPermissionRelationOperateLogOperateDO operateAfter = SaasPgroupPermissionRelationOperateLogOperateDO.builder()
.featureCodes(uniCodes)
.roleCodes(Lists.newArrayList(saasRole.getRoleCode()))
RelationOperateLogRoleBindResourceDO operateAfter = RelationOperateLogRoleBindResourceDO.builder()
.uniCodes(uniCodes)
.roleCode(saasRole.getRoleCode())
.build();
SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder()
.scene(PermissionRelationOperateLogSceneEnum.OMS_ROLE_BIND_FEATURE_RESOURCE.getValue())

View File

@ -3,26 +3,32 @@ package cn.axzo.tyr.server.service.impl;
import cn.axzo.basics.common.BeanMapper;
import cn.axzo.basics.common.util.AssertUtil;
import cn.axzo.basics.common.util.StopWatchUtil;
import cn.axzo.basics.profiles.api.UserProfileServiceApi;
import cn.axzo.basics.profiles.dto.basic.PersonProfileDto;
import cn.axzo.framework.domain.page.PageResp;
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
import cn.axzo.tyr.client.common.enums.FeatureResourceType;
import cn.axzo.tyr.client.common.enums.PageElementFeatureResourceRelationTypeEnum;
import cn.axzo.tyr.client.common.enums.PageElementTypeEnum;
import cn.axzo.tyr.client.common.enums.PermissionRelationOperateLogSceneEnum;
import cn.axzo.tyr.client.model.req.*;
import cn.axzo.tyr.client.model.res.GetUserHasPermissionPageElementResp;
import cn.axzo.tyr.client.model.res.IdentityAuthRes;
import cn.axzo.tyr.client.model.res.PageElementBasicDTO;
import cn.axzo.tyr.client.model.res.PageElementResp;
import cn.axzo.tyr.server.model.RelationOperateLogResourceBindElementDO;
import cn.axzo.tyr.server.model.RelationOperateLogResourceBindRoleDO;
import cn.axzo.tyr.server.repository.dao.SaasFeatureResourceDao;
import cn.axzo.tyr.server.repository.dao.SaasPageElementDao;
import cn.axzo.tyr.server.repository.dao.SaasPageElementFeatureResourceRelationDao;
import cn.axzo.tyr.server.repository.entity.SaasFeatureResource;
import cn.axzo.tyr.server.repository.entity.SaasPageElement;
import cn.axzo.tyr.server.repository.entity.SaasPageElementFeatureResourceRelation;
import cn.axzo.tyr.server.repository.entity.SaasPgroupPermissionRelation;
import cn.axzo.tyr.server.repository.entity.*;
import cn.axzo.tyr.server.service.SaasPageElementService;
import cn.axzo.tyr.server.service.SaasPgroupPermissionRelationOperateLogService;
import cn.axzo.tyr.server.service.TyrSaasAuthService;
import cn.axzo.tyr.server.util.RpcInternalUtil;
import cn.azxo.framework.common.constatns.Constants;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
@ -31,6 +37,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
@ -59,6 +66,8 @@ public class SaasPageElementServiceImpl implements SaasPageElementService {
private final SaasPageElementFeatureResourceRelationDao saasPageElementFeatureResourceRelationDao;
private final SaasFeatureResourceDao saasFeatureResourceDao;
private final TyrSaasAuthService tyrSaasAuthService;
private final SaasPgroupPermissionRelationOperateLogService saasPgroupPermissionRelationOperateLogService;
private final UserProfileServiceApi userProfileServiceApi;
@Qualifier("asyncExecutor")
@Autowired
@ -163,6 +172,9 @@ public class SaasPageElementServiceImpl implements SaasPageElementService {
.build()).collect(Collectors.toList());
saasPageElementFeatureResourceRelationDao.saveBatch(relations);
}
// 保存操作日志
saveOperateLog(modifyPageElementRelation);
}
@Override
@ -387,4 +399,25 @@ public class SaasPageElementServiceImpl implements SaasPageElementService {
.and(w -> pageResources.forEach(p -> w.or().likeRight(SaasFeatureResource::getPath, p.getPath())))
.list();
}
private void saveOperateLog(ModifyPageElementRelationDTO relation) {
List<PersonProfileDto> personProfileDtos = RpcInternalUtil.rpcListProcessor(() -> userProfileServiceApi.getPersonProfiles(Lists.newArrayList(relation.getOperatorId())), "查询用户信息", relation.getOperatorId()).getData();
PersonProfileDto operator = org.apache.commons.collections4.CollectionUtils.isEmpty(personProfileDtos) ? null : personProfileDtos.get(0);
RelationOperateLogResourceBindElementDO operateAfter = RelationOperateLogResourceBindElementDO.builder()
.uniCode(relation.getFeatureResourceUniCode())
.featureCodes(relation.getPageElementCodes())
.build();
SaasPgroupPermissionRelationOperateLog operateLog = SaasPgroupPermissionRelationOperateLog.builder()
.scene(PermissionRelationOperateLogSceneEnum.OMS_FEATURE_RESOURCE_BIND_ELEMENT.getValue())
.sceneId(relation.getFeatureResourceUniCode())
.createBy(relation.getOperatorId())
.createByName(Objects.isNull(operator) ? "" : operator.getRealName())
.traceId(MDC.get(Constants.CTX_LOG_ID_MDC))
.requestData(JSONObject.toJSONString(relation))
.operateData(JSONObject.toJSONString(Lists.newArrayList(operateAfter)))
.build();
saasPgroupPermissionRelationOperateLogService.batchSave(Lists.newArrayList(operateLog));
}
}