基于角度2的用户类型的页面访问

时间:2017-01-26 16:09:19

标签: angular typescript

假设我有四个页面和两个用户类型。登录后,用户可以访问所有四个页面,但对于第二个用户,我们限制只访问2个页面。我们怎样才能在角度2中实现这个目标?

2 个答案:

答案 0 :(得分:3)

你可以创建一个守卫。我们来看这个例子:

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;
  }
}

然后将其添加到路由中:

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

它的作用是使特定路线只能由具有特定角色的用户访问(在这种情况下 - 角色为"ROLE_ADMIN"的用户)

答案 1 :(得分:0)

您可以使用Angular2 guards CanActivateCanActivateChildCanDeactivate& CanLoad)来保护/控制对各种路线(页面)的访问。

为了更好地理解,请阅读此内容 - PROTECTING ROUTES USING GUARDS IN ANGULAR