Ґарди (охоронці)
Якщо ви хочете обмежити доступ до певних маршрутів, ви можете скористатись ґардами. Готовий приклад застосунку з ґардами ви можете проглянути у теці examples, або у RealWorld example.
Будь-який ґард є DI провайдером, що передається в інжектори на рівні запиту в injector-scope режимі, або на інших рівнях, якщо контролер працює в режимі context-scoped. Кожен ґард повинен бути класом, що впроваджує інтерфейс CanActivate
:
interface CanActivate {
canActivate(ctx: RequestContext, params?: any[]): boolean | number | Promise<boolean | number>;
}
Наприклад, це можна зробити так:
import { guard, RequestContext } from '@ditsmod/core';
import { CanActivate } from '@ditsmod/rest';
import { AuthService } from './auth.service.js';
@guard()
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService) {}
async canActivate(ctx: RequestContext, params?: any[]) {
return Boolean(await this.authService.updateAndGetSession());
}
}
Файли ґардів рекомендується називати із закінченням *.guard.ts
, а імена їхніх класів - із закінченням *Guard
.
Якщо canActivate()
повертає:
true
чиPromise<true>
, значить Ditsmod буде обробляти відповідний маршрут із цим ґардом;false
чиPromise<false>
, значить відповідь на запит міститиме 401 статус і обробки маршруту з боку контролера не буде;number
чиPromise<number>
Ditsmod інтерпретує як номер статусу (403, 401 і т.п.), який треба повернути у відповіді на HTTP-запит.