Moved all heroes functionality into milestone 2 Crisis Center initial functionality is milestone 3 Admin feature module as milestone 4 including route guard examples Updated milestone 5 to lazy load admin feature module Added examples for CanLoad, CanActivateChildren guard, component-less routes Added section on explanation of ActivatedRoute Added section on animating route components Added section on relative navigation
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
		
			Executable File
		
	
	
	
	
| // #docplaster
 | |
| // #docregion, admin-can-load
 | |
| import { Injectable }       from '@angular/core';
 | |
| import {
 | |
|   CanActivate, Router,
 | |
|   ActivatedRouteSnapshot,
 | |
|   RouterStateSnapshot,
 | |
|   CanActivateChild,
 | |
|   NavigationExtras,
 | |
|   CanLoad, Route
 | |
| }                           from '@angular/router';
 | |
| import { AuthService }      from './auth.service';
 | |
| 
 | |
| @Injectable()
 | |
| export class AuthGuard implements CanActivate, CanActivateChild, CanLoad {
 | |
|   constructor(private authService: AuthService, private router: Router) {}
 | |
| 
 | |
|   canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
 | |
|     let url: string = state.url;
 | |
| 
 | |
|     return this.checkLogin(url);
 | |
|   }
 | |
| 
 | |
|   canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
 | |
|     return this.canActivate(route, state);
 | |
|   }
 | |
| 
 | |
|   canLoad(route: Route): boolean {
 | |
|     let url = `/${route.path}`;
 | |
| 
 | |
|     return this.checkLogin(url);
 | |
|   }
 | |
| // #enddocregion admin-can-load
 | |
| 
 | |
|   checkLogin(url: string): boolean {
 | |
|     if (this.authService.isLoggedIn) { return true; }
 | |
| 
 | |
|     // Store the attempted URL for redirecting
 | |
|     this.authService.redirectUrl = url;
 | |
| 
 | |
|     // Create a dummy session id
 | |
|     let sessionId = 123456789;
 | |
| 
 | |
|     // Set our navigation extras object
 | |
|     // that contains our global query params and fragment
 | |
|     let navigationExtras: NavigationExtras = {
 | |
|       queryParams: { 'session_id': sessionId },
 | |
|       fragment: 'anchor'
 | |
|     };
 | |
| 
 | |
|     // Navigate to the login page with extras
 | |
|     this.router.navigate(['/login'], navigationExtras);
 | |
|     return false;
 | |
|   }
 | |
| // #docregion admin-can-load
 | |
| }
 |