如何解决Angular 路由器:根据用户的角色导航到不同的路由 编辑 (2021-04-20)
我正在编写一个具有以下结构的模拟电子商务应用程序:
- 应用
基本工作流程应该如下:
我不确定如何在成功登录后完成重定向。显然,它必须分两个阶段完成:首先是一些公共路径,例如 /
,然后是 /customer
或 /admin
,具体取决于用户的角色。第二阶段可能需要由 app-routing.module.ts
处理,也许使用守卫,但我不确定具体如何去做。
编辑 (2021-04-20)
问题总结如下:
我需要的是一种方法(最好是声明性的)将应用程序从 /
重定向到以下路径之一,具体取决于其状态:
解决方法
您可以创建一些虚拟组件并使用处理正确导航的防护来保护它。像这样:
[
{
path: 'loggedin',component: DummyComponent,canActivate: [HandleLoginGuard]
},{
path: 'admin',component: AdminComponent,},{
path: 'customer',component: CustomerComponent,}
]
@Injectable()
class HandleLoginGuard implements CanActivate {
canActivate(
route: ActivatedRouteSnapshot,state: RouterStateSnapshot
) {
if(isAdmin()){
route.navigate(/admin);
}else{
route.navigate(/customer);
}
return false;
}
}
这样你就可以把逻辑放在一个守卫而不是登录组件中。
,我最终做的是:
// app-routing.module.ts
const routes: Routes = [
{
path: '',canActivate: [AuthorizationGuard],children: [],{ path: '**',component: NotFoundPage },];
// authorization.guard.ts
@Injectable({
providedIn: 'root',})
export class AuthorizationGuard implements CanActivate {
constructor(private router: Router,private authService: AuthService) {}
canActivate(
route: ActivatedRouteSnapshot,state: RouterStateSnapshot
): UrlTree {
const user = this.authService.getLoggedInUser();
return (
(user?.role === 'admin' && this.router.parseUrl('/admin')) ||
(user?.role === 'customer' && this.router.parseUrl('/customer')) ||
this.router.parseUrl('/auth')
);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。