Я не могу понять, где и что мне не хватает.Я пытаюсь создать авторизацию для дочерних маршрутов.И если пользователь -> Admin, только он может просматривать URL-адреса, а если пользователь ---> notAdmin, то только он не может просматривать определенные URL-адреса. Я сделал одну авторизацию, что в login.component.ts, япроверьте, является ли пользователь администратором или нет, и сохраните его в localStorage для дальнейшего доступа, но он не работает, когда я отдельно ввожу URL-адрес и получаю доступ к странице.
Например.Я не могу разрешить доступ к этому конкретному URL для -> notAdmin
http://localhost:4200/#/master-system/add-group
Ошибка, которую я получаю, -
Error: Cannot match any routes. URL Segment: 'master-system/update-system'
PS:Должен ли компонент update-user обязательно находиться внутри компонента master-user?код
routing-module.ts
const routes: Routes = [
{
path: '',
data: {
title: 'Master System'
},
children: [
{
path: 'master-systems',
component: MasterSystemsComponent,
canActivateChild:[AuthGuard],
data: {
title: 'Master Systems'
},
children:[
{
path: 'add-system',
component: AddSystemComponent,
data: {
title: 'Add'
}
},
{
path: 'update-system',
component: UpdateSystemComponent,
data: {
title: 'Update'
}
}
]
},
{
path: 'master-interface',
component: MasterInterfaceComponent,
canActivateChild:[AuthGuard],
data: {
title: 'Master Interface'
},
children:[{
path: 'add-interface',
component: AddInterfaceComponent,
data: {
title: 'Add'
}
},
{
path: 'update-interface',
component: UpdateInterfaceComponent,
data: {
title: 'Update'
}
}]
},
{
path: 'master-user',
component: MasterUserComponent,
canActivateChild:[AuthGuard],
data: {
title: 'Master User'
},
children:[
{
path: 'add-user',
component: AddUserComponent,
data: {
title: 'Add'
}
},
{
path: 'update-user',
component: UpdateUserComponent,
data: {
title: 'Update',
expectedRole: '18'
},
},
]
},
{
path: 'master-group',
component: GroupComponent,
canActivateChild:[AuthGuard],
data: {
title: 'Master Group'
},
children:[
{
path: 'add-group',
component: AddGroupComponent,
data: {
title: 'Add',
expectedRole: '18'
}
},
{
path: 'update-group',
component: UpdateGroupComponent,
data: {
title: 'Update'
}
},
]
},
{
path: 'master-role',
component: RoleComponent,
canActivateChild:[AuthGuard],
data: {
title: 'Master Role'
},
children:[ {
path: 'add-role',
component: AddRoleComponent,
data: {
title: 'Add'
}
},
{
path: 'update-role',
component: UpdateRoleComponent,
data: {
title: 'Update'
}
},
]
}, ]
}
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class MasterSystemRoutingModule { }
authGuard.ts
import { Injectable } from '@angular/core';
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot,
CanActivateChild } from '@angular/router';
@Injectable()
export class AuthGuard implements CanActivateChild, CanActivate {
expectedRole: any;
accessId:boolean=false;
constructor(private router: Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot)
{
if (localStorage.getItem('CurrentUser')){
console.log("IN AUTHGUARD", localStorage.getItem('CurrentUser'));
console.log("inside CanActivate - true ")
return true;
}
else {
this.router.navigate(['/pages/login'], { queryParams: { returnUrl:
state.url } });
console.log("inside CanActivate - false -
this.router.navigate(['/pages/login'] ")
return false;
}
}
canActivateChild(route: ActivatedRouteSnapshot, state:
RouterStateSnapshot) {
this.expectedRole = route.data;
console.log("AAAAAA ", this.expectedRole);
if ( localStorage.getItem('Access') == "18") {
this.accessId = true;
localStorage.setItem('accessId',
JSON.stringify(this.accessId));
var output = localStorage.getItem('accessId');
console.log("localStorage.getItem('accessId') = ",output)
return true;
}
else
{
this.router.navigate(['/pages/login'], { queryParams: {
returnUrl: state.url } });
return false;
}
}
}