С помощью нескольких методов вы можете предотвратить доступ (Inteceptor, Wildcard route, CanActive guard), где система предотвращает случайный или недействительный доступ
01) Если вы хотите предотвратить несанкционированный доступВы можете использовать Interceptor. Из серверной части необходимо указать роль пользователя (например, SYSTEM_ADMIN)
В unauthorized.interceptor.ts
@Injectable()
export class UnauthorizedInterceptor implements HttpInterceptor {
constructor() { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).pipe(catchError(err => {
if ([401, 403].indexOf(err.status) !== -1) {
// YOUR POP UP MESSAGE
}
const error = err || err.statusText;
return throwError(error);
}))
}
}
В AppModule.ts
@NgModule({
...,
[{
provide: HTTP_INTERCEPTORS,
useClass: UnauthorizedInterceptor,
multi: true
}]
})
02) Использовать подстановочный знак углового маршрутизатора - это помогает перенаправить страницу на PageNotFoundComponent
, если URL не найденв твоем роутинге. Помните, что подстановочный маршрут должен быть последним маршрутом.
{path: '404', component: PageNotFoundComponent},
{path: '**', redirectTo: '/404'}
03) Использование canActive Guard
На маршруте
{
path: "customer/view",
component: CustomerViewComponent,
data: { role: ["SYSTEM_ADMIN"] }
}
В AuthGuard.ts
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor (private auth: AuthService, private router: Router, public toster: ToastrManager,) {
}
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
//get the current user value
const currentUser = this.auth.currentUserValue;
if (currentUser) {
// check if route is restricted by role
if (route.data.role && route.data.role.indexOf(currentUser.role) === -1) {
this.toster.errorToastr("Your do not have permission to access", "Not Authorized", { position: "bottom-right", animate: "slideFromBottom" });
return;
}
// authorised so return true
return true;
}
// not logged in so redirect to login page with the return url
this.router.navigate(['/signin']);
return false;
}
}