tenant-util.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. /**
  2. * 租户标识读写。
  3. *
  4. * 背景:库隔离(Database-per-Tenant)方案下,账号只存在于各租户库中,
  5. * 服务端必须在认证之前就知道该连哪个库,所以登录请求要带 X-Tenant-ID。
  6. * token 签发之后租户已写入 claim,后续请求由服务端以 claim 为准,本模块不再参与。
  7. *
  8. * 存储键全平台统一(见 setting.js 的 TENANT_STORE_NAME):
  9. * 主应用与各 qiankun 子应用共用同一个 key,避免"主应用存 A、子应用读 B"。
  10. */
  11. import { TENANT_STORE_NAME } from '@/config/setting';
  12. /**
  13. * 读取当前租户标识。
  14. * @returns {string} 租户 ID 字符串;未选择时返回空串
  15. */
  16. export function getTenantId() {
  17. const value = localStorage.getItem(TENANT_STORE_NAME);
  18. return value === null || value === undefined ? '' : value;
  19. }
  20. /**
  21. * 写入当前租户标识。
  22. * @param {string|number} tenantId 租户 ID;空值表示未选择,此时直接清理该键
  23. */
  24. export function setTenantId(tenantId) {
  25. if (tenantId === null || tenantId === undefined) {
  26. removeTenantId();
  27. return;
  28. }
  29. const text = String(tenantId).trim();
  30. if (text === '') {
  31. removeTenantId();
  32. return;
  33. }
  34. localStorage.setItem(TENANT_STORE_NAME, text);
  35. }
  36. /** 清理当前租户标识(退出登录时调用) */
  37. export function removeTenantId() {
  38. localStorage.removeItem(TENANT_STORE_NAME);
  39. }