尝试使用angularjs

时间:2017-05-01 14:08:24

标签: javascript angularjs angular-ui-router



      .state('newProduct', {
        url: '/products/new',
        templateUrl: 'app/products/templates/product-new.html',
        controller: 'ProductNewCtrl',
        authenticate: 'cook,admin'
      })




我尝试根据角色身份验证添加不同的客户端路由但是如果我尝试添加其他角色(例如cook),例如它不会触发由url定义的页面。如果这更有意义,它将单独工作 认证:' cook', 身份验证:' admin'

这是语法错误吗?

2 个答案:

答案 0 :(得分:0)

在.state块中,'验证'只是一个数据持有者 您需要手动检查身份验证的值以处理权限。

例如:

    myApp.config(function($stateProvider, $urlRouterProvider){
     $stateProvider
      .state("newProduct", {
        url: '/products/new',
        templateUrl: 'app/products/templates/product-new.html',
        controller: 'ProductNewCtrl',
        authenticate: true
      })
    });

如果您需要检查权限,则需要使用$ state对象访问$ state。 例如,在你的控制器中注入$ state对象并使用:

      if($state.get('newProduct').authenticate){ //if(true) in this case)
      //do what u want
      }

如果你想在每次更改状态/屏幕时检查权限,那么也是一个例子:

   angular.module("myApp").run(function ($rootScope, $state, AuthService) {
   $rootScope.$on("$stateChangeStart", function(event, toState,
   toParams,fromState, fromParams){
     if (toState.authenticate){
     // User is authenticated
     // do what u want
     }
    });
   });

答案 1 :(得分:0)

发现修复感谢Alon indexOf它让我思考:)

.run(function($rootScope, $state, Auth) {
    // Redirect to login if route requires auth and the user is not logged in
    // also if the user role doesn't match with the one in `next.authenticate`
    $rootScope.$on('$stateChangeStart', function(event, next) {
      if (next.authenticate) {
        var loggedIn = Auth.isLoggedIn(function(role) {
          if (role && next.authenticate.indexOf(role[0]) !== -1) {
            console.log('works')
            return; // logged in and roles matches
          }

          event.preventDefault();
          if(role) {
            // logged in but not have the privileges (roles mismatch)
            console.log(next.authenticate.indexOf(role[0]));
            $state.go('onlyAdmin');
          } else {
            // not logged in
            $state.go('login');
          }
        });
      }
    });
  });