Есть ли опции / переменные для canActivate в Angular 4 - PullRequest
0 голосов
/ 28 апреля 2018

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

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

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

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

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

1 Ответ

0 голосов
/ 29 апреля 2018

Вы можете добавить свойство ' 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.

...