【问题标题】:Angular2 Router CanActivate, with Parameters?Angular2路由器可以激活,带参数?
【发布时间】:2016-12-25 12:25:18
【问题描述】:

我在这个特定问题上看到了一些问题。

我最近只从事 angular2 项目。无论如何,我现在遇到了一个问题。在弃用的路由器中,我在路由的数据部分添加了我的用户角色,我已经覆盖了 routerOutlet,所以我可以在激活路由之前检查这个值。

目前我们可以符合 CanActivate Class/Interface 行,我们可以调用它。

现在我希望能够为此类 CanActivate 类提供权限(我已将其放入枚举中)。在我只是通过访问我的 SessionService 检查用户是否登录之前,我现在需要检查用户是否具有某些权限。

正如我现在所看到的,我必须实现一个新类,该类为每个权限实现 CanActivate。现在这意味着我有 7 个。然而,我们正处于这个确切项目的早期阶段,没有太多想法我可以将其提高到 11 个。

我眼前看到的是一个实现,每个这样的 canActivate 实现只花费我大约 3 到 5 行。但是,如果我可以提供属性或参数的实现,我会觉得更有帮助。

没想到我必须实现这样的类:

CanActivateIfUserHasPermissionsViewContentAndViewUsers 甚至更长。

请注意,在我的情况下,权限基本上是多个操作。喜欢查看所有内容元素,或编辑所有元素等。

【问题讨论】:

  • 好问题 :) 我想这可以从另一边完成。您可以将下一条路线导入CanActivateGuard 并查看用户是否有权限。
  • 您将获得正确的路径,而不是路径对象。那么当它是子路由时会发生什么,那仍然匹配吗?您的警卫是否也知道子路线?或者你会扫描你的子模块以获取路由配置。不过还没有检查过。
  • 我现在没有要检查的代码。但我想你会得到ActivatedRouteSnapshotangular.io/docs/ts/latest/api/router/index/…
  • 我现在在服务中使用该属性,我在模块构造中填充该属性

标签: angular angular-routing


【解决方案1】:

所以我没有找到使用参数实现 CanActivate 的方法。

但是,我确实找到了一个现在对我来说似乎很好的解决方法。 我有一项服务,我可以在其中将我的路由加载到 Module 构造上。 (我只是在模块的构造函数中添加)。

我的路线现在包含数据 { 权限:[此处的我的值] }。在 canActive 钩子中检查,因为 canActivate 实现也使用相同的服务。

我的解决方案基于我对另一个问题的讨论:Angular2 RC5 Cross-Module Provider / Scanning

【讨论】:

  • 如何在 CanActivate 挂钩中访问您的数据?如果我尝试这样做,我只有在我已经在一个组件中时才能访问它。当我在 CanActivate 守卫中时,我无法访问路由指定的数据。
  • 嗨,如上所述,我将路由加载到服务中。关于我的应用程序的构建。所以当 NgModule 加载时。这允许我在激活时根据目标路径从该服务获取路径的完整信息。 (我做了一个基于此返回我的路线的方法)。这样我就可以得到完整的数据,并且可以检查它是否有效
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
  • 2017-12-03
相关资源
最近更新 更多