Raj*_*Raj 6 authorization asynchronous angularjs
在定义AngularJS应用程序的路由时,为了指示每个路由应具有的访问级别,access已为每个路由添加了一个名为的新属性.这基于此处描述的客户端授权方法.
该.config块看起来如下所示:
app.config(['$routeProvider', '$locationProvider', '$httpProvider',
function ($routeProvider, $locationProvider, $httpProvider) {
var access = routingConfig.accessLevels; //Initialize with asynch data instead
$routeProvider.
when('/home', {
templateUrl: '/Templates/home.html',
controller: 'homeController',
access: access.user
});
$routeProvider.
when('/private', {
templateUrl: '/Templates/private.html',
controller: 'adminController',
access: access.admin
});
//...more route configurations
}]);
Run Code Online (Sandbox Code Playgroud)
抛开方法的核心逻辑,我只想知道如何access用一些异步数据初始化变量,以便在access为每个路由定义属性时可用它?这是必需的,因为只有服务器知道访问级别列表.
虽然初始化AngularJS服务的答案基于在promise服务中公开a 并resolve在路由配置中使用异步数据,但在我的情况下它不起作用,因为我需要在定义路由配置之前解析异步调用,因为access属性取决于关于异步数据.
我有什么选择?能否承诺/递延方法仍然以某种方式使用?
任何建议将不胜感激.
编辑:
为了描述access正在做什么,它被一个名为的单独模块填充routingConfig.在该方法中,用户可以属于某个角色,该角色被定义为二进制数.例如public:001,user:010,admin:100(等等).
任何路由的访问级别将再次是由允许访问它的所有用户角色的OR操作定义的二进制数.因此,例如,如果user访问级别可以由用户角色user(010)和admin(100)访问,则其位掩码将是110.稍后检查路由上的访问,我们可以对用户角色和访问执行AND操作-level以查看它是否被授权.细节可以在上面的链接中看到.
请注意,服务器端的数据仍然是更复杂的算法,因此即使在客户端操作上述逻辑,这样的用户也只能看到任何未授权页面的标记.
再次,回到手头的问题.如何access使用config来自服务器的异步数据初始化块中的属性.此数据可能如下所示:
accessLevels : {
'public' : '111',
'user' : '110',
'admin': '100'
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我理解正确的话,应用程序应该在可用之前没有响应。那么异步access抓取有什么意义呢?access
也许这种方法是合适的[肯定在许多类似的情况下应该是合适的]:
<script src="angular.js"></script>
<script>
angular.module('config').constant(
<%= // JSON.stringify your config and access %>
);
</script>
<script src="app.js"></script>
Run Code Online (Sandbox Code Playgroud)
如果您确实必须异步完成,请使用XHRHttpRequest或其他方式手动获取access您bootstrap的应用程序。
| 归档时间: |
|
| 查看次数: |
1868 次 |
| 最近记录: |