【发布时间】:2017-10-05 13:56:48
【问题描述】:
我很好奇其他人在为其应用程序的路由安全性方面做了什么。起初,我们通过 Angular 的 .run 方法调用我们的安全服务来实现我们的安全性
app.run(function ($rootScope, $state, SecuirtyService){
SecurityService.initSecurity().then(function(data){}); }
SecurityService.initSecurity 然后会进行一次休息调用以查看用户拥有哪些权限。这样做的问题是,由于 .initSecurity 返回一个承诺,应用程序的其余部分将执行,直到 $http 决定执行调用以加载 UI 而没有完成安全检查。
所以为了解决这个问题,我在我们的 ui-router 中为我们的每个状态添加了一个决心。这确保我们的 .initSecurity 在控制器加载之前得到满足。
Header: {
templateUrl: "header/headerBar.html",
controller: "HeaderController as headerCtrl",
resolve: {
security: function(SecurityService){
return SecurityService.initSecurity();
}
}
},
问题在于 .initSecurity 在每个页面加载之前被调用,这看起来非常多余。
在一个完美的世界中, .run 方法在承诺完成之前不会完成,但https://github.com/angular/angular.js/issues/4003 看起来并没有发生。
我的问题是您如何对您的应用程序实施安全检查?您是否以某种方式从 .run 方法中触发它?还是将其作为解决方案的一部分是一个有效的选择?
【问题讨论】:
-
我们正在使用 cookie,并在后端验证该用户是否有权访问该路由。我们不在客户端检查,因为无论您需要在服务器端检查什么
标签: angularjs security angular-ui-router angular-promise