package com.bcxin.Infrastructures; import cn.hutool.core.util.StrUtil; import com.bcxin.Infrastructures.enums.MasterSlaveType; import com.bcxin.Infrastructures.exceptions.ArgumentTenantException; import lombok.Getter; import org.springframework.util.StringUtils; import java.io.Serializable; import java.util.HashMap; import java.util.Map; public class TenantUserContext implements ContextAware { public static final String CURRENT_TENANT_USER_INFO = "API.CURRENT_TENANT_USER_INFO"; private static final ThreadLocal _userContextThread = new ThreadLocal<>(); @Override public UserModel get() { return _userContextThread.get(); } @Override public void init(UserModel data) { _userContextThread.set(data); } public void init(String token, String tenantUserId) { _userContextThread.set(UserModel.create(token, tenantUserId)); } public void assignDetail(String name,String organId,String employeeId,MasterSlaveType masterSlaveType,boolean isDomainAdmin, boolean isDepartAdmin, String areaCode,String cid) { UserModel model = _userContextThread.get(); if (model == null) { throw new ArgumentTenantException("当前用户上下文无效, 系统未能在AuthFilter执行初始化"); } model.assignDetail(name, organId, employeeId, masterSlaveType,isDomainAdmin,isDepartAdmin,areaCode,cid); _userContextThread.set(model); } public boolean isDomainAdmin() { UserModel model = _userContextThread.get(); if (model == null) { return false; } return model.isMaster(); } public String getAreaCode() { UserModel model = _userContextThread.get(); if (model == null) { return ""; } return StrUtil.isNotEmpty(model.getAreaCode()) ? model.getAreaCode():""; } public void reset() { _userContextThread.set(null); } @Getter public static class UserModel implements Serializable { private final String token; private final String id; private String name; private String organId; private String employeeId; private String cid; /** * 组织管理员 */ private boolean isMaster; private String areaCode; private boolean isDepartAdmin = false; private final boolean leaveDatedLimited = true; private final Map attachments = new HashMap<>(); public UserModel(String token, String id) { this.id = id; this.token = token; } public void assignDetail(String name, String organId, String employeeId, MasterSlaveType masterSlaveType,boolean isDomainAdmin, boolean isDepartAdmin, String areaCode,String cid) { this.name = name; this.organId = organId; this.employeeId = employeeId; //this.isMaster = masterSlaveType == MasterSlaveType.Master || isDomainAdmin; this.isMaster = isDomainAdmin; this.isDepartAdmin = isDepartAdmin; this.areaCode = areaCode; this.cid = cid; } public static UserModel create(String token, String id) { return new UserModel(token, id); } } }