假设我有四个页面和两个用户类型。登录后,用户可以访问所有四个页面,但对于第二个用户,我们限制只访问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
(即 CanActivate
,CanActivateChild
,CanDeactivate
& CanLoad
)来保护/控制对各种路线(页面)的访问。
为了更好地理解,请阅读此内容 - PROTECTING ROUTES USING GUARDS IN ANGULAR