Supongamos que tengo cuatro páginas y dos tipos de usuario. Después de iniciar sesión, el usuario uno puede acceder a las cuatro páginas, pero para el segundo usuario estamos restringiendo el acceso a solo 2 páginas. ¿Cómo podemos lograr esto en angular 2 ..?

0
Sriramwar.Ravikumar 26 ene. 2017 a las 19:09

2 respuestas

La mejor respuesta

Puedes crear un guardia. Tomemos este ejemplo:

import {Injectable} from '@angular/core';
import {CanActivate, Router, ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router';
import {UserService} from '../auth';

@Injectable()
export class RoleGuard implements CanActivate {
  constructor(private userService:UserService, private router:Router) {
  }

  canActivate(next:ActivatedRouteSnapshot, state:RouterStateSnapshot) {
    if (this.userService.hasRole('ROLE_ADMIN')) {
      return true;
    }
    this.router.navigate(['some-other-route']);
    return false;
  }
}

Luego lo agrega a su enrutamiento:

    path: 'pathToAdminRoute',
    component: SomeComponent,
    canActivate: [RoleGuard]

Lo que hace es hacer que esa ruta en particular solo sea accesible para un usuario con un rol específico (en este caso, un usuario con un rol de "ROLE_ADMIN")

3
DGarvanski 26 ene. 2017 a las 16:20

Puede usar Angular2 guards ( viz. CanActivate, CanActivateChild, CanDeactivate y CanLoad) para proteger / controlar el acceso a varios rutas (páginas).

Para una mejor comprensión, lea esto: PROTECCIÓN RUTAS CON GUARDIAS EN ANGULAR

0
Santanu Biswas 26 ene. 2017 a las 16:25