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]而不是角色?