guardMiddleware function

Middleware guardMiddleware(
  1. List<String> guardNames, {
  2. GuardRegistry? registry,
})

Implementation

Middleware guardMiddleware(List<String> guardNames, {GuardRegistry? registry}) {
  final reg = registry ?? GuardRegistry.instance;
  return (EngineContext ctx, Next next) async {
    for (final name in guardNames) {
      final handler = reg.resolve(name);
      if (handler == null) {
        continue;
      }
      final result = await Future.sync(() => handler(ctx));
      if (!result.allowed) {
        if (result.response != null) {
          return result.response!;
        }
        ctx.response.statusCode = HttpStatus.forbidden;
        ctx.response.write('Forbidden by guard: $name');
        return ctx.response;
      }
    }
    return await next();
  };
}