当前位置: 首页 > 面试题库 >

角路由异步授权

燕照
2023-03-14
问题内容

Angular在路由上不提供任何授权/访问权限(我说的是默认的Angular路由1.x,而不是beta 2.0或UI路由)。但是我必须执行它。

我遇到的问题是我有一项服务,该服务调用服务器以提供此信息并返回承诺。但是,此数据仅获取一次,然后缓存在客户端上,但是仍然需要获取一次。

我现在想处理$routeChangeStart检查下一条路由是否定义了特定属性的事件authorize: someRole。然后,该处理程序应使用我前面提到的服务获取该数据,并根据返回的数据采取相应的措施。

除了为我的所有路线添加 解析度之外 ,还有其他想法吗?我可以以某种方式集中进行此操作吗?一旦适用所有路线?

最终解决方案

借助公认的答案,我能够实现一个相当简单且集中的解决方案,该解决方案可以进行异步授权。单击此处查看其运行状况或查看其内部工作代码。


问题答案:

最简单的方法是处理当前路由的解析依赖性,并且$routeChangeStart是管理此路由的好地方。这是一个例子。

app.run(function ($rootScope, $location) {
  var unrestricted = ['', '/login'];

  $rootScope.$on('$routeChangeStart', function (e, to) {
    if (unrestricted.indexOf(to.originalPath) >= 0)
      return;

    to.resolve = to.resolve || {};
    // can be overridden by route definition
    to.resolve.auth = to.resolve.auth || 'authService';
  });

  $rootScope.$on('$routeChangeError', function (e, to, from, reason) {
    if (reason.noAuth) {
      // 'to' path and params should be passed to login as well
      $location.path('/login');
    }
  });
});

另一个选择是将default方法添加到$routeProvider和修补$routeProvider.when以扩展默认对象的路由定义。



 类似资料:
  • 英文原文: http://emberjs.com/guides/routing/asynchronous-routing/ 本节内容主要介绍一些路由的高级特性,以及路由是如何处理应用中的一些复杂异步逻辑的。 承诺简介 Ember在路由中处理异步逻辑的方案主要依赖于承诺(Promise)。简单地说,承诺就是代表了最后的值的对象。承诺可以被履行(成功的获得了最后的结果)也可以被拒绝(没有获得最后的结果

  • Ember.js路由器能够使用异步路由处理应用程序中的复杂异步逻辑。 下面给出的表显示了路由器中处理异步逻辑的不同类型 - S.No. 异步路由器和描述 1 路由器暂停承诺 可以通过从模型钩子返回promise来暂停转换。 2 当Promises拒绝 如果在转换期间模型拒绝承诺,则将中止转换。 3 Recovering from Rejection 从中止的过渡中恢复。

  • 1.1.0版本新增了路由授权功能,采用RBAC权限管理方式实现。 每个ISV(appKey)对应一个或多个角色 每个角色分配多个路由权限 接口跟角色相关联,ISV拥有哪些角色,就具有角色对应的接口访问权限。 假设把路由a,b,c分配给了VIP角色,那么具有VIP角色的ISV可以访问a,b,c三个路由。 默认情况下,接口访问时公开的,ISV都能访问。如果要设置某个接口访问权限,在@Open注解中指定

  • 我正在使用Yoeman Angular软件包构建一个Angular前端站点。该项目正使用节点托管在Heroku中。js构建包。 Heroku构建项目时没有错误,它运行Gulp和Bower来安装依赖项。执行启动脚本并编译项目后,索引页面加载不会出现问题,但任何其他非主页的页面(例如登录页面)都会出现“无法获取/登录”消息。 这似乎是一个常见的问题,因为我读过许多关于如何解决Heroku上的Angul

  • 问题内容: 在安装组件之前进行授权检查的最佳实践是什么? 我使用react-router 1.x 这是我的路线 这是我的仪表板组件: 问题答案: 更新了 React Router v4的* 解决方案 * 反应路由器到v3 使用’onEnter’事件并在回调中检查用户是否被授权:

  • 我有一个小难题来解决这个问题。 我有一个用户和一个管理员角色。 用户应该能够列出除管理员以外的所有用户。管理员可以列出所有用户。 我想到的第一个解决方案是检查控制器级别的角色: 但是我更想做的是在路线层面上,保持控制器更干净,但不知何故它确实起作用了。它只列出用户,即使我作为管理员登录。 有什么建议吗?谢谢!