Я следую этому простому учебнику по 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, чтобы подтвердить, если учебник рекомендует лучший подход.
Спасибо.