Rob*_*nik 6 routing authorization angularjs
Angular不提供路由的任何授权/访问权限(我说的是默认的Angular route 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');
}
});
});
Run Code Online (Sandbox Code Playgroud)
另一个选择是添加default方法$routeProvider和修补$routeProvider.when以从默认对象扩展路由定义.
| 归档时间: |
|
| 查看次数: |
1665 次 |
| 最近记录: |