我已在db中的数组中保存了用户的角色。 roles数组看起来像这样。
{
"_id" : ObjectId("5708a54c8becc5b357ad82bb"),
"__v" : 2,
"active" : true,
"adminReports" : [],
"created" : ISODate("2016-04-09T06:46:36.814Z"),
"displayName" : "Admin Local",
"email" : "admin@localhost.com",
"firstName" : "Admin",
"groups" : [],
"lastLogin" : ISODate("2016-12-29T13:34:48.592Z"),
"lastName" : "Local",
"password" : "jYQB4vNsJLkkSveGZygN3llMMHbNkZWnnQZuaV4l0NAoOixh2JndlNFojigHz4Sus5St8loOWaKeKTtPVDwY4Q==",
"profileImageURL" : "modules/users/client/img/profile/default.png",
"provider" : "local",
"roles" : [
"superAdmin", "admin","manager","user"
],
"salt" : "1v/XyKlUdhNqgEBPaAPSeA==",
"userWeeklyReport" : true,
"username" : "admin"
}
当我必须检查登录用户是管理员还是管理员时,我正在用 indexOf 检查它,这是正确的方法,但我的代码看起来不太好。如果我必须检查登录用户是管理员, CEO 还是经理,这是一个片段。
if(req.user.roles.indexOf('admin') !== -1 || req.user.roles.indexOf('manager') !== -1 || req.user.roles.indexOf('CEO') !== -1){
//some code goes here
}
有很多indexOf,看起来不太好。任何人都可以告诉我这样做的正确方法,以便我的代码看起来更具可读性 提前谢谢。
答案 0 :(得分:4)
您可以使用array#some
检查role
中是否存在数组中存储的req.user.roles
。 array#includes
将检查所选角色是否存在于req.user.roles
。
if(['admin','manager','CEO'].some(role => req.user.roles.includes(role)))
答案 1 :(得分:1)
if(req.user.roles.indexOf('admin') !== -1 //Rest of the code}
可能永远不会为-1,因为数组包含您要检查的所有角色。
您需要在变量中获取登录用户的角色,并检查角色数组中是否存在该角色,因为只有一个indexOf
就足够了
var someRoles = 'admin'
if(req.user.roles.indexOf(someRoles )){
//some code goes here
}
答案 2 :(得分:0)
如果你对ES6没问题,那么Array#some()就可以了。
let matched= ["admin","manager","CEO"].some(s=> req.user.roles.indexOf(s) !== -1)