检查用户是否具有特定角色

时间:2020-07-20 16:39:20

标签: javascript mongodb mongoose mongodb-query

所以我在快递服务器中使用mongoDb并存储用户信息,如下所示:

var UserSchema = new Schema({
    username: { type: String, required: true, index: { unique: true } },
    password: { type: String, required: true },
    email: {type: String, required: true ,  index: { unique: true } },
    isActive: {type:Boolean, default:false},
    signUpDate: {type: Date, default: Date.now()},
    roles: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: "Role"
        }
    ]
});

角色只有一个简单的字段:姓名。

例如,要确定用户是否是管理员,

User.findById(req.SecureUserId).populate('roles').exec((err, user) => {
        if (err) {
            res.status(500).send({ message: err });
            return;
        }
        for(let roles of user.roles){
            if(roles.name === 'admin'){
                next();
                return;
            }
        }

但是,这似乎可以更好地查询数据库? 我将如何在mongoDB中做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以使用.aggregate()将单个用户与其角色“加入”,然后运行$match来验证是否存在名为admin的角色。如果特定用户没有这种角色,那么聚合将返回一个空数组:

User.aggregate([
    { $match: { _id: req.SecureUserId } },
    {
        $lookup: {
            from: "roles",
            localField: "roles",
            foreignField: "_id",
            as: "roles"
        }
    },
    { $match: { "roles.name": "admin" } }
]).exec((err, user) => {
    if(user.length === 1){
        next();
    }
})