Implemented route guards for better navigation

This commit is contained in:
Lukas Metzger 2018-04-11 08:36:26 +02:00
parent 10d3d8c50f
commit 08289e6745
4 changed files with 63 additions and 18 deletions

View file

@ -1,3 +1,5 @@
import { NativeGuard } from './services/native-guard.service';
import { LoggedOutGuard } from './services/logged-out-guard.service';
import { CreateUserComponent } from './pages/create-user/create-user.component';
import { EditUserComponent } from './pages/edit-user/edit-user.component';
import { AdminGuard } from './services/admin-guard.service';
@ -17,12 +19,14 @@ const routes: Routes = [
{
path: '',
component: LoginComponent,
pathMatch: 'full'
pathMatch: 'full',
canActivate: [LoggedOutGuard]
},
{
path: 'logout',
component: LoginComponent,
data: { logout: true }
data: { logout: true },
canActivate: [LoggedOutGuard]
},
{
path: '',
@ -47,24 +51,24 @@ const routes: Routes = [
component: EditAuthComponent,
data: { type: 'NATIVE' }
},
{
path: 'domains/create/slave',
component: CreateSlaveComponent
},
{
path: 'domains/create/master',
component: CreateAuthComponent,
data: { type: 'MASTER' }
},
{
path: 'domains/create/native',
component: CreateAuthComponent,
data: { type: 'NATIVE' }
},
{
path: '',
canActivate: [AdminGuard],
children: [
{
path: 'domains/create/slave',
component: CreateSlaveComponent
},
{
path: 'domains/create/master',
component: CreateAuthComponent,
data: { type: 'MASTER' }
},
{
path: 'domains/create/native',
component: CreateAuthComponent,
data: { type: 'NATIVE' }
},
{
path: 'users',
component: UsersComponent
@ -81,7 +85,8 @@ const routes: Routes = [
},
{
path: 'password',
component: PasswordComponent
component: PasswordComponent,
canActivate: [NativeGuard]
},
{
path: '**',

View file

@ -1,3 +1,5 @@
import { LoggedOutGuard } from './services/logged-out-guard.service';
import { NativeGuard } from './services/native-guard.service';
import { SearchComponent } from './partials/search/search.component';
import { CreateUserComponent } from './pages/create-user/create-user.component';
import { EditUserComponent } from './pages/edit-user/edit-user.component';
@ -78,7 +80,9 @@ import { UsersComponent } from './pages/users/users.component';
DomainsOperation,
UsersOperation,
AuthGuard,
AdminGuard
AdminGuard,
NativeGuard,
LoggedOutGuard
],
bootstrap: [AppComponent]
})

View file

@ -0,0 +1,18 @@
import { StateService } from './state.service';
import { Injectable } from '@angular/core';
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
@Injectable()
export class LoggedOutGuard implements CanActivate {
constructor(private gs: StateService, private router: Router) { }
canActivate(): boolean {
if (this.gs.isLoggedIn) {
this.router.navigate(['/domains']);
return false;
} else {
return true;
}
}
}

View file

@ -0,0 +1,18 @@
import { StateService } from './state.service';
import { Injectable } from '@angular/core';
import { CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
@Injectable()
export class NativeGuard implements CanActivate {
constructor(private gs: StateService, private router: Router) { }
canActivate(): boolean {
if (!this.gs.isNative) {
this.router.navigate(['/']);
return false;
} else {
return true;
}
}
}