Ролевый пользователь в Angular 8 с перечислением - PullRequest
0 голосов
/ 11 января 2020

Я следую этому простому учебнику по Angular 8 на основе аутентификации на основе ролей. У него есть следующее перечисление:

export enum Role {
    User = 'User',
    Admin = 'Admin'
}

В охране есть часть учебного кода, которую я не понимаю (даже если она прокомментирована):

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    const currentUser = this.authenticationService.currentUserValue;
    if (currentUser) {
        // check if route is restricted by role
        if (route.data.roles && route.data.roles.indexOf(currentUser.role) === -1)
            The line above what does it mean? There is no user nor admin?
            // role not authorised so redirect to home page
            this.router.navigate(['/']);
            return false;
        }

        // authorised so return true -->And this one, authorizes the normal user? Or the admin?
        return true;
    }
    // not logged in so redirect to login page with the return url
    this.router.navigate(['/login'], { queryParams: { returnUrl: state.url } });
    return false;
}

Дело в том, как интерфейс canActivate может отличаться guish Admin от User?

Маршруты:

const routes: Routes = [
    {
        path: '',
        component: HomeComponent,
        canActivate: [AuthGuard]
    },
    {
        path: 'admin',
        component: AdminComponent,
        canActivate: [AuthGuard],
        data: { roles: [Role.Admin] }
    },
    {
        path: 'login',
        component: LoginComponent
    },

    // otherwise redirect to home
    { path: '**', redirectTo: '' }
];

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

Спасибо.

1 Ответ

2 голосов
/ 11 января 2020

В основном route.data.roles && route.data.roles.indexOf(currentUser.role) === -1 проверяет, входит ли роль currentUser в массив ролей, определенный в маршрутах. Если он не перенаправляется на домашнюю страницу, на которой есть authGuard, но роли не определены.

И маршрут администратора будет виден только администратору из-за роли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...