Контроль доступа к маршрутам охранниками¶
30.09.2026
Клиентские охранники нельзя считать единственным контролем доступа. Любой JavaScript, который выполняется в браузере, пользователь этого браузера может изменить. Авторизацию всегда проверяйте на сервере, в дополнение к охранникам на клиенте.
Охранники маршрута — функции, которые решают, может ли пользователь перейти на маршрут или покинуть его. Это контрольные точки доступа к конкретным маршрутам. Чаще всего ими закрывают аутентификацию и разграничение доступа.
Создание охранника маршрута¶
Охранник маршрута генерируют через Angular CLI:
1 | |
Команда предложит выбрать тип охранника маршрута и создаст файл CUSTOM_NAME-guard.ts.
Охранник можно написать и вручную: отдельный файл TypeScript в проекте Angular. Обычно в имени оставляют суффикс -guard.ts, чтобы файл было проще отличить от остальных.
Типы возврата охранника маршрута¶
У всех охранников маршрута одинаковый набор возможных типов возврата. От типа зависит, как именно управляют навигацией:
| Типы возврата | Описание |
|---|---|
boolean | true разрешает переход, false блокирует его (см. примечание об охраннике CanMatch) |
UrlTree или RedirectCommand | Перенаправляет на другой маршрут вместо блокировки |
Promise<T> или Observable<T> | Маршрутизатор берёт первое выданное значение и отписывается |
У CanMatch поведение другое: при возврате false Angular пробует остальные подходящие маршруты, а не блокирует навигацию целиком.
Типы охранников маршрута¶
В Angular четыре типа охранников маршрута, и у каждого своя задача:
Каждый охранник видит сервисы, предоставленные на уровне маршрута, и данные конкретного маршрута через аргумент route.
CanActivate¶
Охранник CanActivate решает, может ли пользователь открыть маршрут. Чаще всего его ставят на аутентификацию и авторизацию.
По умолчанию ему доступны такие аргументы:
route:ActivatedRouteSnapshot— сведения об активируемом маршрутеstate:RouterStateSnapshot— текущее состояние маршрутизатора
Вернуть можно стандартные типы возврата охранника.
1 2 3 4 5 6 7 | |
Если пользователя нужно перенаправить, верните URLTree или RedirectCommand. Не возвращайте false и следом не вызывайте navigate программно.
Подробнее — в документации API CanActivateFn.
CanActivateChild¶
Охранник CanActivateChild решает, может ли пользователь открыть дочерние маршруты конкретного родителя. Им защищают целый раздел вложенных маршрутов. canActivateChild выполняется для всех дочерних маршрутов. Если у дочернего компонента есть свой дочерний компонент, canActivateChild выполнится по одному разу для обоих компонентов.
По умолчанию ему доступны такие аргументы:
childRoute:ActivatedRouteSnapshot— «будущий» снимок активируемого дочернего маршрута, то есть состояние, в которое маршрутизатор пытается перейтиstate:RouterStateSnapshot— текущее состояние маршрутизатора
Вернуть можно стандартные типы возврата охранника.
1 2 3 4 5 6 7 | |
Подробнее — в документации API CanActivateChildFn.
CanDeactivate¶
Охранник CanDeactivate решает, может ли пользователь покинуть маршрут. Частый сценарий — не дать уйти с формы, пока в ней есть несохранённые изменения.
По умолчанию ему доступны такие аргументы:
component:T— экземпляр деактивируемого компонентаcurrentRoute:ActivatedRouteSnapshot— сведения о текущем маршрутеcurrentState:RouterStateSnapshot— текущее состояние маршрутизатораnextState:RouterStateSnapshot— следующее состояние маршрутизатора, куда идёт переход
Вернуть можно стандартные типы возврата охранника.
1 2 3 4 5 6 7 8 9 10 | |
Подробнее — в документации API CanDeactivateFn.
CanMatch¶
Охранник CanMatch решает, подходит ли маршрут при сопоставлении пути. Если маршрут отклонён, сопоставление переходит к другим подходящим маршрутам, а не останавливает навигацию целиком. Так делают флаги функций, A/B-тестирование и условную загрузку маршрутов.
По умолчанию ему доступны такие аргументы:
route:Route— проверяемая конфигурация маршрутаsegments:UrlSegment[]— сегменты URL, которые ещё не разобраны при проверке родительских маршрутовcurrentSnapshot: PartialMatchRouteSnapshot— снимок маршрута на текущем шаге сопоставления
Вернуть можно стандартные типы возврата охранника, но при false Angular пробует другие подходящие маршруты и не блокирует навигацию целиком.
1 2 3 4 5 6 7 8 | |
На один и тот же путь можно повесить разные компоненты.
routes.ts
1 2 3 4 5 6 7 8 9 10 11 12 | |
Когда пользователь открывает /dashboard, берётся первый маршрут, чей охранник разрешил совпадение.
Подробнее — в документации API CanMatchFn.
Подключение охранников к маршрутам¶
Созданные охранники подключают в определениях маршрутов.
В конфигурации охранники задают массивом: на один маршрут можно повесить несколько. Они выполняются в том порядке, в каком стоят в массиве.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | |
Источник: https://angular.dev/guide/routing/route-guards