Угловой | Охрана не стреляет по роутеру - PullRequest
0 голосов
/ 07 сентября 2018

Я пытаюсь установить защиту для моих маршрутов, которые предназначены для плагинов.

У меня есть концепция, и она, кажется, работает, однако у меня есть 2 проблемы, и они следующие:

  • При нажатии на routerLink из приложения Angular. Похоже, он вообще не вызывает охранника и позволяет пользователю перейти к маршруту.
  • Другая проблема заключается в том, что при переходе по маршруту через URL, например, /plugins/team-members, страница не будет перенаправлена.

Вот мой модуль маршрутизатора:

const routes = {
    path: 'plugin',
    canActivate: [
        BIPluginGuard
    ],
    children: [
        {
            path: 'team-members',
            component: BIPluginTeamMembers
        },
        {
            path: 'sponsors',
            component: BIPluginSponsors
        }
    ]
};

А вот и мой охранник:

canActivate(route: ActivatedRouteSnapshot): boolean {
        const currentRoute: string = route.children[0].routeConfig.path;

        const accessiblePlugin: any = this.plugins.find((plugin) => {
            return plugin.path === currentRoute;
        });

        if (!accessiblePlugin || !accessiblePlugin.allowed) {
            this.router.navigate['/dashboard'];
            return false;
        }

        return true;
    }

Это мой первый раз, когда я использую охрану, поэтому я не уверен, нужно ли мне ставить canActivate на каждом маршруте, хотя я хочу избежать этого, если это возможно.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Должен ли URL /plugins/team-members быть /plugin/team-members? Ваш маршрут указывает путь как path: 'plugin', где плагин является единственным.

Можете ли вы подтвердить, что на вкладке сети в инструментах разработчика не отображается ошибка 404 для запроса членов команды?

0 голосов
/ 07 сентября 2018

Таким образом, угловая документация на подпись canActivate состоит из RouterStateSnapshot в качестве второго параметра функции. Можете ли вы включить такой, как этот

canActivate(
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
  ): Observable<boolean>|Promise<boolean>|boolean 

Также проверьте, зарегистрирован ли этот маршрутный охранник с app.module.ts под провайдерами

...