WANG 6 年 前
コミット
9ba06c90b3

+ 4 - 0
examcloud-core-basic-dao/src/main/java/cn/com/qmth/examcloud/core/basic/dao/RootOrgPrivilegeRelationRepo.java

@@ -1,5 +1,7 @@
 package cn.com.qmth.examcloud.core.basic.dao;
 
+import java.util.List;
+
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.repository.query.QueryByExampleExecutor;
@@ -15,4 +17,6 @@ public interface RootOrgPrivilegeRelationRepo
 
 	void deleteByRootOrgIdAndGroupId(Long rootOrgId, Long groupId);
 
+	List<RootOrgPrivilegeRelationEntity> findAllByRootOrgId(Long rootOrgId);
+
 }

+ 74 - 0
examcloud-core-basic-service/src/main/java/cn/com/qmth/examcloud/core/basic/service/cache/RootOrgPrrivilegesCache.java

@@ -0,0 +1,74 @@
+package cn.com.qmth.examcloud.core.basic.service.cache;
+
+import java.util.List;
+import java.util.Set;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.google.common.collect.Sets;
+
+import cn.com.qmth.examcloud.commons.exception.StatusException;
+import cn.com.qmth.examcloud.core.basic.dao.OrgRepo;
+import cn.com.qmth.examcloud.core.basic.dao.PrivilegeRepo;
+import cn.com.qmth.examcloud.core.basic.dao.RootOrgPrivilegeRelationRepo;
+import cn.com.qmth.examcloud.core.basic.dao.entity.OrgEntity;
+import cn.com.qmth.examcloud.core.basic.dao.entity.PrivilegeEntity;
+import cn.com.qmth.examcloud.core.basic.dao.entity.RootOrgPrivilegeRelationEntity;
+import cn.com.qmth.examcloud.support.cache.bean.RootOrgPrivilegesCacheBean;
+import cn.com.qmth.examcloud.web.cache.RandomObjectRedisCache;
+import cn.com.qmth.examcloud.web.helpers.GlobalHelper;
+
+@Service
+public class RootOrgPrrivilegesCache extends RandomObjectRedisCache<RootOrgPrivilegesCacheBean> {
+
+	@Autowired
+	PrivilegeRepo privilegeRepo;
+
+	@Autowired
+	OrgRepo orgRepo;
+
+	@Autowired
+	RootOrgPrivilegeRelationRepo rootOrgPrivilegeRelationRepo;
+
+	@Override
+	public RootOrgPrivilegesCacheBean loadFromResource(Object... keys) {
+		Long rootOrgId = (Long) keys[0];
+
+		OrgEntity orgEntity = GlobalHelper.getPresentEntity(orgRepo, rootOrgId, OrgEntity.class);
+		if (null != orgEntity.getParentId()) {
+			throw new StatusException("120001", "org [id=" + rootOrgId + "] is not a root org");
+		}
+		List<RootOrgPrivilegeRelationEntity> relationList = rootOrgPrivilegeRelationRepo
+				.findAllByRootOrgId(rootOrgId);
+
+		Set<Long> privilegeIdList = Sets.newHashSet();
+		Set<String> privilegeCodeList = Sets.newHashSet();
+
+		for (RootOrgPrivilegeRelationEntity cur : relationList) {
+			privilegeIdList.add(cur.getPrivilegeId());
+			PrivilegeEntity privilegeEntity = GlobalHelper.getPresentEntity(privilegeRepo,
+					cur.getPrivilegeId(), PrivilegeEntity.class);
+			privilegeCodeList.add(privilegeEntity.getCode());
+		}
+
+		RootOrgPrivilegesCacheBean bean = new RootOrgPrivilegesCacheBean();
+		bean.setRootOrgId(rootOrgId);
+		bean.setPrivilegeIdList(privilegeIdList);
+		bean.setPrivilegeCodeList(privilegeCodeList);
+
+		return bean;
+	}
+
+	@Override
+	protected String getKeyPrefix() {
+		return "$__ROOT_ORG_PRIVS:";
+	}
+
+	@Override
+	protected int getTimeout() {
+		// 10分钟
+		return 60 * 10;
+	}
+
+}

+ 5 - 0
examcloud-core-basic-service/src/main/java/cn/com/qmth/examcloud/core/basic/service/impl/RolePrivilegeServiceImpl.java

@@ -25,6 +25,7 @@ import cn.com.qmth.examcloud.core.basic.dao.entity.RootOrgPrivilegeRelationEntit
 import cn.com.qmth.examcloud.core.basic.service.RolePrivilegeService;
 import cn.com.qmth.examcloud.core.basic.service.bean.RoleInfo;
 import cn.com.qmth.examcloud.core.basic.service.cache.PrrivilegeRolesCache;
+import cn.com.qmth.examcloud.core.basic.service.cache.RootOrgPrrivilegesCache;
 import cn.com.qmth.examcloud.web.helpers.GlobalHelper;
 
 /**
@@ -61,6 +62,9 @@ public class RolePrivilegeServiceImpl implements RolePrivilegeService {
 	@Autowired
 	PrrivilegeRolesCache prrivilegeRolesCache;
 
+	@Autowired
+	RootOrgPrrivilegesCache rootOrgPrrivilegesCache;
+
 	@Override
 	public void updateRolePrivilegeRelations(Long rootOrgId, Long roleId, Long privilegeGroupId,
 			Set<Long> privilegeIdSet) {
@@ -137,6 +141,7 @@ public class RolePrivilegeServiceImpl implements RolePrivilegeService {
 			rootOrgPrivilegeRelationRepo.saveAndFlush(bean);
 		}
 
+		rootOrgPrrivilegesCache.remove(rootOrgId);
 	}
 
 	@Override