Есть ли опции / переменные для canActivate в Angular 4

Я хотел бы отказать в доступе к маршрутам на основе прав, которыми обладает пользователь. Так что у меня есть таблица внутри моего mongoDb с userRights и двумя простыми охранниками на самом деле. Один для зарегистрированных пользователей и один для администраторов.

Так что теперь я хотел бы дать пользователю право посетить конкретный маршрут. Поэтому я хотел бы добавить свой canActivate: [checkForRightGuard] который анализируется по праву, так что проверьте, но как мне это сделать?

Я думал об этом решении, потому что я не думаю, что я должен создавать защиту для каждого права, которое я должен проверить - или?

Так что я думаю о чем-то. как это (конечно, это не работает, но я думаю, что это показывает, что мне нужно)

{path: 'admin/expandSoftware', component: ExpandSoftwareComponent, canActivate: [AdminGuard('canExpandSoftware')]},

1 ответ

Решение

Вы можете добавить свойствоdata к маршруту, например, так:

{
    path: 'admin/expandSoftware', 
    component: ExpandSoftwareComponent, 
    canActivate: [AdminGuard],
    data: {authorization: 'canExpandSoftware'}
}

и тогда в вашем маршруте охраны вы можете получить к нему доступ следующим образом:-

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
    console.log(route.data["authorization"]);
    return this.canActivate(route, state);
}

но будьте осторожны, вам может быть запрещено передавать динамические (во время выполнения) данные в ваши маршруты, если вы используете компиляцию AOT (Ahead of Time), так как маршруты анализируются во время компиляции при использовании компиляции AOT.

Другие вопросы по тегам