首先有两种方法,一种更简单的方法是您只想为一种类型创建一个模板,另一种为另一种类型,另一种更复杂的解决方案允许您导航,例如不同的管理页面另一方面,不同页面之间的导航。由用户。
我会这样做吗?
简单的解决方案
如前所述,在 HTML 标记中使用 * ngIf,这意味着如果满足条件,则显示,如果不满足,则不显示。
例如:
<ng-container *ngIf="isAdmin"><adminComponent></adminComponent></ng-container>
<ng-container *ngIf="!isAdmin"><userComponent></userComponent></ng-container>
困难但更好的解决方案
更复杂的解决方案需要你了解一点角度路径管理并使用防护。
就我而言,这就是我创建将您带到后台的路线的方式(后台 = 部分管理员):
{
path: paths.backoffice,
loadChildren: './features/backoffice/backoffice.module#BackofficeModule',
canActivate: [BackofficeGuard]
}
守卫包含什么?非常简单:我在我的服务中查找用户并检查(在我的情况下,它具有 admin 属性,它是一个布尔值)是否是管理员。如果是 admin 我返回 true 以便允许浏览,如果是 false 我不返回任何内容并将其发送到家中。
export class BackofficeGuard implements CanActivate {
constructor(private router: Router, private stateService: StateService) {
}
isAdmin = false;
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot
):
| Observable<boolean | UrlTree>
| Promise<boolean | UrlTree>
| boolean
| UrlTree {
return this.stateService.getLoggedUser().pipe(
map(user => {
if (user.admin) {
return true;
} else {
return this.router.createUrlTree(['/home']);
}
})
);
}
canActivateChild(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return this.canActivate(route, state);
}
}
这样您就可以使用 URL 进入您的管理区。如果您想以更简单的方式输入,您可以创建一个链接,将您带到 URL 管理员,只有当您是管理员时,它才会让您通过。
Angular 的路由指南:https://angular.io/guide/router