yuhdemo/jnpf-java-boot/jnpf-admin/src/main/java/jnpf/aop/PermissionAdminAspect.java
2026-01-30 14:02:18 +08:00

112 lines
4.1 KiB
Java

package jnpf.aop;
import jnpf.annotation.OrganizeAdminIsTrator;
import jnpf.base.ActionResult;
import jnpf.base.UserInfo;
import jnpf.constant.MsgCode;
import jnpf.constant.PermissionConstant;
import jnpf.permission.entity.OrganizeRelationEntity;
import jnpf.permission.model.authorize.SaveBatchForm;
import jnpf.permission.service.OrganizeRelationService;
import jnpf.util.PermissionAspectUtil;
import jnpf.util.UserProvider;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author JNPF开发平台组
* @version V3.1.0
* @copyright 引迈信息技术有限公司
* @date 2021/3/15 17:12
*/
@Slf4j
@Aspect
@Component
public class PermissionAdminAspect implements PermissionAdminBase{
@Autowired
private UserProvider userProvider;
@Autowired
private OrganizeRelationService organizeRelationService;
/**
* 分级管理切点
*/
@Pointcut("@annotation(jnpf.annotation.OrganizeAdminIsTrator)")
public void pointcut() {
}
/**
* 分级管理切点
*
* @param pjp
* @return
* @throws Throwable
*/
@Around("pointcut()")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
return PermissionAdminBase.permissionCommon(pjp, userProvider, this);
}
@Override
public Boolean detailPermission(ProceedingJoinPoint pjp, String operatorUserId, String methodName){
switch (methodName) {
case PermissionConstant.METHOD_SAVE:
if(userProvider.get().getIsAdministrator()){
return true;
}
String roleId = (String) pjp.getArgs()[0];
List<String> orgIdList = organizeRelationService.getRelationListByRoleId(roleId).stream().map(OrganizeRelationEntity::getOrganizeId).collect(Collectors.toList());
StringBuilder orgId = new StringBuilder();
orgIdList.stream().forEach(t->{
orgId.append(t + ",");
});
return PermissionAspectUtil.getPermitByOrgId(
// 操作目标对象组织ID集合
orgId.toString(),
operatorUserId,
PermissionConstant.METHOD_UPDATE);
case PermissionConstant.METHOD_SAVE_BATCH:
// 修改为只有超管才能操作
if(userProvider.get().getIsAdministrator()){
return true;
}
// 得到角色id
SaveBatchForm saveBatchForm = (SaveBatchForm) pjp.getArgs()[0];
List<String> list = Arrays.asList(saveBatchForm.getRoleIds());
if (list.size() == 0) {
list = new ArrayList<>();
list.add("");
}
// 得到组织id
List<String> orgIdLists = organizeRelationService.getRelationListByRoleIdList(list).stream().map(OrganizeRelationEntity::getOrganizeId).collect(Collectors.toList());
StringBuilder orgIds = new StringBuilder();
orgIdLists.stream().forEach(t->{
orgIds.append(t + ",");
});
return PermissionAspectUtil.getPermitByOrgId(
// 操作目标对象组织ID集合
orgIds.toString(),
operatorUserId,
PermissionConstant.METHOD_UPDATE);
case PermissionConstant.METHOD_UPDATE:
//判断是否有当前组织的修改权限
String organizeId = String.valueOf(pjp.getArgs()[0]);
return PermissionAspectUtil.containPermission(organizeId, operatorUserId, methodName);
default:
return false;
}
}
}