这是我的路线:
router.get('/home', function (req, res) {
User.findOne({_id: req.user._id}, function (err, user) {
if (err) return next(err);
res.render('home', {user: user});
});
});
基本上,为了让某人查看此/主页,他们需要登录,这是User.findOne发挥作用的地方。它将在'用户'中搜索用户。采集;如果它没有找到用户(如果用户没有登录),则会返回错误。否则,它会显示/ home页面。
现在,我希望在我的网站上有一个单独的管理部分,只有拥有管理员权限的用户才能访问该页面。我尝试过这样的事情:
router.get('/admin', function (req, res) {
User.findOne({_id: req.user._id, admin: true}, function (err, user) {
if (err) return next(err);
res.render('admin', {user: user});
});
});
我试图让代码做的是查找2个参数:用户是否已登录,以及该用户是否记录了他们的“管理员”信息。设置为' true'。显然上面的代码不起作用,我也不知道如何让它更好地工作。
编辑:我的用户架构:
var schema = mongoose.Schema;
var UserSchema = new schema ({
username: {type: String, unique: true},
email: {type: String, unique: true, lowercase: true, required: true},
password: {type: String, minlength: passMinLength, required: true},
admin: {type: Boolean, default: false},
profile: {
firstName: {type: String, default: ''},
lastName: {type: String, default: ''}
}
});
答案 0 :(得分:2)
查询{_id: req.user._id, admin: true}
没有错,如果User.Schema也包含admin(布尔)字段,它应该有效。
此外,替代方法是在获得User对象后检查管理员。
User.findOne({_id: req.user._id}, function (err, user) {
if (err) return next(err);
if(!user){
//considering admin is boolean field
if(!user.admin){
// Not Authorised to access, do something
}
else{
// User verified as Admin
res.render('admin', {user: user});
}
}
// UserId Not found, do something
});