如何根据模块条件允许路由到用户?

How can I allow routes to users based on module condition?

我知道 Angular 中 Auth guard 的用法,我只是 angular 中的初学者 我刚刚进行了基于读写访问的基本身份验证,其中包括 isAdmin 或 Isguest

但现在我希望特定用户必须只能访问某些路由

比如我有三个模块

  1. 一个组件
  2. B分量
  3. C分量

以上所有组件可能是子路由,也可能不是子路由。

我希望 harry 用户可以访问模块 A 和 B

Jackson 可以访问模块 B 和 C

Michel 只能访问模块 A

那么如何在 Angular 中构建此类机制?

实际上我知道 Auth guard,但我怎样才能像在数据库中一样组织数据以添加组件列表或其他内容?

我需要在canActivate中添加什么条件?

一种解决方案,如果明天有新组件出现并且我需要访问授权,我需要通过该解决方案减少处理并保持动态。

欢迎任何好的想法...!!

您需要创建如下所示的 Auth Guard:

@Injectable()
    export class MyGuard implements CanActivate {
      constructor(private _myUserService: MyUserService) {}
    
      canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
        if(//ADD CONDITION HERE)
            return true;
        return false;
      }
    }

然后在你的路线中你会看到类似的东西:

{
    path: 'XXX',
    component: XXXComponent,
    canActivate: [MyGuard],
}

可以为每个路由添加权限,存储每个用户需要的权限。

const routes: Routes = [
  {
    path: 'dashboard',
    loadChildren: () => import('./dashboard/dashboard.module').then(mod => mod.DashboardModule),
    canActivate: [ Guard ],
    data: { permission: 'view dashboard' }
  }

在 canActivate() 中,您可以检查权限是否存在于用户数据中。

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
  if(!route.data || (route.data && this.user.permissions.find(route.data.permission))) {
    return true;
  }
}