context.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. 'use strict';
  2. const TENANT = Symbol('Context#tenant');
  3. // const TENANT_MODEL = Symbol('Context#model@tenant');
  4. const TENANT_USERID = Symbol('Context#userid@tenant');
  5. const TENANT_ROLE = Symbol('Context#role@tenant');
  6. const TENANT_TAGS = Symbol('Context#tags@tenant');
  7. // this 就是 ctx 对象,在其中可以调用 ctx 上的其他方法,或访问属性
  8. module.exports = {
  9. // 多租户系统中的当前租户信息(multi-tenancy)
  10. get tenant() {
  11. const { defaultTenant } = this.app.config.multiTenancy || {};
  12. if (!this[TENANT]) {
  13. // 从 header或请求参数中获取,否则使用默认值。实际情况可能更复杂,需要从登录用户中获取该信息
  14. this[TENANT] = this.query._tenant || this.get('x-tenant') || defaultTenant;
  15. }
  16. return this[TENANT];
  17. },
  18. set tenant(value) {
  19. this[TENANT] = value;
  20. },
  21. // 多租户系统中的当前租户信息(multi-tenancy)
  22. get model() {
  23. const { defaultTenant: _defaultTenant } = this.app.config.multiTenancy || {};
  24. if (this.tenant /* && this.tenant !== defaultTenant */) {
  25. return this.app.tenantModel(this.tenant);
  26. }
  27. return this.app.model;
  28. },
  29. // 当前用户相关信息
  30. get userid() {
  31. if (!this[TENANT_USERID]) {
  32. this[TENANT_USERID] = this.get('x-userid');
  33. }
  34. return this[TENANT_USERID];
  35. },
  36. get role() {
  37. if (!this[TENANT_ROLE]) {
  38. this[TENANT_ROLE] = this.get('x-role');
  39. }
  40. return this[TENANT_ROLE];
  41. },
  42. get tags() {
  43. if (!this[TENANT_TAGS]) {
  44. this[TENANT_TAGS] = this.get('x-tags');
  45. }
  46. return this[TENANT_TAGS];
  47. },
  48. };