guardMiddleware function
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();
};
}