使用异步数据初始化AngularJS配置块

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)

art*_*iak 2

因此,如果我理解正确的话,应用程序应该在可用之前没有响应。那么异步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或其他方式手动获取accessbootstrap的应用程序。