对不起,标题不好-我不知道该如何格式化。我会解释我的问题。
所以我有这个req.user:
我想构建一个中间件,以便可以通过检查req.user.privileges.region中的任何代码是否与我在数据库中的代码匹配来检查用户是否可以访问该区域(1用于管理员) 。
middleware.access2 = function(req, res, next)
{
if(req.isAuthenticated())
{
User.findOne({'username': req.user.username, "privileges.region": {$in: [1, req.body.regiune]}}, function(err, usr)
{
if(err)
{
console.log("middleWare.access2 - " + err);
return res.redirect("/login");
}
else
{
if(usr !== null)
{
console.log(usr);
return next();
}
else
{
return res.redirect("/login");
}
}
})
}
}
有没有没有迭代的方法吗?我可以使用用户拥有的区域(来自req.user)构建一个数组,并将其传递给查询。
我可以通过某种方式访问privileges.region而不需要迭代,还是应该使用上面的想法?
谢谢。
答案 0 :(得分:1)
您可以使用lodash 我已经写了一个基本示例,可以对其进行完善。
const _=require('lodash')
const user={
username:'marcu',
privileges:[
{
id:1,
region:10,
write:1,
edit:1
},
{
id:2,
region:15,
write:1,
edit:1
},
{
id:3,
region:20,
write:1,
edit:1
}
]
}
found=_.findKey(user.privileges,o=>o.region===15)
console.log(found);
对于o.region===15
,输出为1,对于o.region===10
,输出为0,对于o.region===20
,输出为2,依此类推。
findkey返回包含该值的对象的索引。如果不存在该值,则结果不确定
答案 1 :(得分:0)
lodash的另一种方法
const _=require('lodash')
const user={
username:'marcu',
privileges:[
{
id:1,
region:10,
write:1,
edit:1
},
{
id:2,
region:15,
write:1,
edit:1
},
{
id:3,
region:20,
write:1,
edit:1
}
]
}
const userArr=_.values(user.privileges)
const found=userArr.find(o=>o.region==15)
console.log(JSON.stringify(found));
输出:
{"id":2,"region":15,"write":1,"edit":1}
输出将是不确定的