手写一个Midway中间件

26 阅读1分钟

真实用到的:用于判断当前用户是否在当前租户下

import { provide } from '@ali/midway';
import { MidwayWebMiddleware, IWebMiddleware } from '@midwayjs/web';
import { HsfService } from '../service/hsf';
@provide('login')
export class LoginMiddleware implements IWebMiddleware {
  // 2. 判断是否有租户权限
  resolve(): MidwayWebMiddleware {
    return async (ctx, next) => {
      const { user } = ctx;
      const hsfService = await ctx.requestContext.getAsync<HsfService>(
        'hsfService'
      );

      // 如果已经有租户列表
      const result = await hsfService.fetch(
        'bizServiceProxy.getBizSpaceByBucUser',
        {
          bucId: '' + user.bucid,
          realmId: user.realmId,
          operatorId: user.workid,
          operator: user.name,
          email: user.email,
        }
      );

      for (let i = 0; i < result?.data?.length; ++i) {
        const { isWhiteListUser } = result?.data?.[i];
        if (!isWhiteListUser) {
          ctx.redirect('/underMaintenance');
        }
      }

      ctx.user.bizInfo = result?.data || [];
      await next();
    };
  }
}