Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正在尝试使用angularjs设置多个身份验证权限_Javascript_Angularjs_Angular Ui Router - Fatal编程技术网

Javascript 正在尝试使用angularjs设置多个身份验证权限

Javascript 正在尝试使用angularjs设置多个身份验证权限,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,.state('newProduct'{ url:“/products/new”, templateUrl:'app/products/templates/product new.html', 控制器:“ProductNewCtrl”, 认证:“厨师,管理员” })在.state块中,“authenticate”只是一个数据持有者 您需要手动检查authenticate的值以处理权限 例如: myApp.config(function($stateProvider, $urlRouter

.state('newProduct'{
url:“/products/new”,
templateUrl:'app/products/templates/product new.html',
控制器:“ProductNewCtrl”,
认证:“厨师,管理员”

})
在.state块中,“authenticate”只是一个数据持有者 您需要手动检查authenticate的值以处理权限

例如:

    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
     }
    });
   });

多亏了Alon indexOf,我才找到了修复方法:)

.run(函数($rootScope,$state,Auth){
//如果路由需要身份验证且用户未登录,则重定向到登录
//此外,如果用户角色与“next.authenticate”中的角色不匹配,请验证`
$rootScope.$on(“$stateChangeStart”,函数(事件,下一个){
如果(下一步。验证){
var loggedIn=Auth.isLoggedIn(函数(角色){
if(角色&&next.authenticate.indexOf(角色[0])!=-1){
console.log('works')
return;//已登录且角色匹配
}
event.preventDefault();
如果(角色){
//已登录但没有权限(角色不匹配)
console.log(next.authenticate.indexOf(角色[0]);
$state.go('onlyAdmin');
}否则{
//未登录
$state.go('login');
}
});
}
});

});“行不通”有点含糊不清。你能说得更具体一点吗?你使用的是外部模块吗?什么是
认证:'cook,admin'
?请描述您试图通过此代码实现的目标,以便我们提供帮助。另外,如果这个问题与
ui路由器
有关,请用标签正确标记。是的,它使用的是ui路由器。我嵌入了主要组件,所以你知道我想做什么。我认为,因为OP询问的是[2个角色]您应该包括一个拆分数组中字符串的示例,并演示如何检查数组中是否存在特定角色it@ben将
authenticate:'cook,admin'
更改为
authenticate:['cook','admin']
并在回答中写入
if($state.get('newProduct')。authenticate){
,您可以将其更改为
if($state.get('newProduct')。authenticate.indexOf('cook')!=-1){alert(“用户是厨师”)
-这是数组的一般概念-
。如果数组中不存在元素或数组中元素的当前位置(以零为基础),indexOf
将返回
-1
接下来有两个问题。由于某些原因,authenticate会记录所有角色['cook'、'admin'],因此比较当然不会起作用,这是我需要解决的问题,第二个问题是,获取值而不是数组是否应该是角色[0]而不是角色?