【发布时间】:2021-07-26 22:21:53
【问题描述】:
我有一个多用户 Angular 应用程序,每个用户都有一个模块(因为他们有完全不同的可访问页面),如下所示:
- app.module.ts
- app-routing.module.ts
- 登录/
- login.component.ts
- 管理员/
- 页数/
- 用户管理/
- 配置/
- admin.module.ts
- admin-routing.module.ts
- 页数/
- 用户/
- 页数/
- 任务管理/
- 配置/
- user.module.ts
- user-routing.module.ts
- 页数/
- 客人/
- 页数/
- guest.module.ts
- guest-routing.module.ts
从登录页面(来自 app-routing 的/login),我想根据用户提供的凭据重定向到每个模块,但 NOT 使用像 /user @987654324 这样的子路由@或/guest
相反,当管理员登录时,我希望重置 URL。因此,例如,管理员不应该看到路径/admin/user-management 或/admin/configuration;它只是访问/user-management 或/configuration
这可能吗?如果我有 admin 和 user 的 /configuration 路由会不会有问题?
编辑:这是Stackblitz working example。登录后查看 URL 路由。
编辑 2: 在 Stackblitz 示例中,您可以在 master 上看到原始问题,在 solution 分支上看到工作解决方案。
【问题讨论】:
-
你必须去设置路由器保护?
-
我实现了一个
auth.guard.ts来限制没有特定角色的用户无法访问的页面,但问题在于 URL 路由本身,而不是对它的访问 -
如果角色是管理员,那么您可以使用 canLoad、canActivate、guard 来不加载 URL
-
你能举个例子吗?我已经使用 canActivate 让管理员只能访问管理员路由,但这不是问题。问题是,每当我加载路由子模块(
UserModule、AdminModule、GuestModule)时,我都必须在子路由下进行(分别为/users/admin/guest)。但我不想要这种行为。我想加载一个子模块并在根路由(/)下使用它的路由 -
然后将所有这些子模块放到父路径,它将作为父@GusSL加载