简体   繁体   English

Angular 基于角色路由到子路径

[英]Angular Routing to Child path based on role

After successful login, I redirect to following path this.router.navigate(['/main/']) Based on role received from login.成功登录后,我重定向到以下路径this.router.navigate(['/main/'])基于从登录收到的角色。 Is it possible to redirect to diff modules.是否可以重定向到差异模块。

Example : If Role is 'Admin' if I redirect to ['/main'] based on role it will navigate to admin module.示例:如果我根据角色重定向到 ['/main'],则角色为“管理员”,它将导航到管理模块。 Using guards使用警卫

Project structure:项目结构:

App module应用模块

---Login Module

---Main Module

    ---Admin Module

    ---User Module

Main Router File主路由器文件

  {
    path: 'main',
    component: MainComponent,
    children: [
      {
        path: 'admin',
        loadChildren: ()=>import('./admin/admin.module').then(({
          AdminModule
        })=>AdminModule),
        canActivate: [
          RoleGuard
        ],
        data: {
          roles: [
            'Admin'
          ]
        }
      },
      {
        path: 'user',
        loadChildren: ()=>import('./user/user.module').then(({
          UserModule
        })=>UserModule),
        canActivate: [
          RoleGuard
        ],
        data: {
          roles: [
            'User'
          ]
        }
      }
    ]
  }
]```

By use Guard you can do it;通过使用 Guard 你可以做到;

Creat a Guard for Admin为管理员创建警卫

export class AdminGuard implements CanActivate {

  constructor(private router: Router) { }

  canActivate() {
    const AdminTokenLogin = Math.random();
    if (AdminTokenLogin > 0.4) {
      this.router.navigate(['/admin/admin']);
      return true;
    } else {
      this.router.navigate(['/main']);
      return false;
    }
  }

}

In your routes you can use;在您的路线中,您可以使用;

{ path: 'admin/admin', component: AdminComponent, canActivate: [AdminGuard] },

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM