wangwei 6 лет назад
Родитель
Сommit
7c3badd9d2

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

@@ -28,13 +28,17 @@ import cn.com.qmth.examcloud.commons.web.security.enums.RoleMeta;
 import cn.com.qmth.examcloud.core.basic.base.constants.PropKeys;
 import cn.com.qmth.examcloud.core.basic.base.enums.AccountType;
 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.RolePrivilegeRelationRepo;
 import cn.com.qmth.examcloud.core.basic.dao.RoleRepo;
 import cn.com.qmth.examcloud.core.basic.dao.StudentRepo;
 import cn.com.qmth.examcloud.core.basic.dao.ThirdPartyAccessRepo;
 import cn.com.qmth.examcloud.core.basic.dao.UserRepo;
 import cn.com.qmth.examcloud.core.basic.dao.UserRoleRelationRepo;
 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.RoleEntity;
+import cn.com.qmth.examcloud.core.basic.dao.entity.RolePrivilegeRelationEntity;
 import cn.com.qmth.examcloud.core.basic.dao.entity.StudentEntity;
 import cn.com.qmth.examcloud.core.basic.dao.entity.ThirdPartyAccessEntity;
 import cn.com.qmth.examcloud.core.basic.dao.entity.ThirdPartyAccessPK;
@@ -78,6 +82,12 @@ public class AuthServiceImpl implements AuthService {
 	@Autowired
 	UserRoleRelationRepo userRoleRelationRepo;
 
+	@Autowired
+	RolePrivilegeRelationRepo rolePrivilegeRelationRepo;
+
+	@Autowired
+	PrivilegeRepo privilegeRepo;
+
 	@Override
 	public User login(LoginInfo loginInfo) {
 
@@ -191,6 +201,7 @@ public class AuthServiceImpl implements AuthService {
 		}
 
 		setSession(user);
+		setRolePrivilegesCache(user);
 
 		if (isLcUser) {
 			setSecurityIp(user, orgId);
@@ -199,6 +210,32 @@ public class AuthServiceImpl implements AuthService {
 		return user;
 	}
 
+	/**
+	 * 设置角色权限缓存
+	 *
+	 * @author WANGWEI
+	 * @param user
+	 */
+	private void setRolePrivilegesCache(User user) {
+		List<Role> roleList = user.getRoleList();
+		Long rootOrgId = user.getRootOrgId();
+		for (Role role : roleList) {
+			Long roleId = role.getRoleId();
+			List<RolePrivilegeRelationEntity> relationList = rolePrivilegeRelationRepo
+					.findAllByRoleIdAndRootOrgId(roleId, rootOrgId);
+
+			StringBuilder sb = new StringBuilder();
+			for (RolePrivilegeRelationEntity cur : relationList) {
+
+				PrivilegeEntity privilegeEntity = privilegeRepo.findOne(cur.getPrivilegeId());
+				sb.append(privilegeEntity.getCode());
+			}
+
+			String key = "$_P_" + rootOrgId + "_" + roleId;
+			redisClient.set(key, sb.toString());
+		}
+	}
+
 	/**
 	 * 设置机构安全IP
 	 *