Я хочу создать роль «пользователи» в Node.js.У меня есть учетные записи «модератора» и «администратора», но я хочу ограничить некоторые страницы от модератора.Я должен создать промежуточное программное обеспечение, но оно ограничивает администратора от защищенной страницы.
Это мой маршрут:
function checkRole(role) {
return function (req, res, next) {
const user = User.findById(req.user._id);
if (user.roleId === role) {
next();
} else {
req.flash('error_msg', 'Payment Page is Restricted');
res.redirect('back')
}
}
}
И это моя модель пользователей:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var bcrypt = require('bcrypt-nodejs');
var userSchema = new Schema({
name:{
type: String,
required: true
},
email:{
type: String,
required: true
},
gender:{
type: String
},
nickname:{
type: String
},
twitter:{
type: String
},
skype:{
type: String
},
username:{
type: String,
required: true
},
password:{
type: String,
required: true
},
roleId: { type: String, lowercase: true, trim: true, enum: ['admin', 'moderator'] },
resetPasswordToken: String,
resetPasswordExpires: Date
}, {timestamps: true})
userSchema.pre('save', function(next) {
var user = this;
var SALT_FACTOR = 12;
if (!user.isModified('password')) return next();
bcrypt.genSalt(SALT_FACTOR, function(err, salt) {
if (err) return next(err);
bcrypt.hash(user.password, salt, null, function(err, hash) {
if (err) return next(err);
user.password = hash;
next();
});
});
});
userSchema.methods.comparePassword = function(candidatePassword, cb) {
bcrypt.compare(candidatePassword, this.password, function(err, isMatch) {
if (err) return cb(err);
cb(null, isMatch);
});
};
module.exports = mongoose.model('User', userSchema);
Я включил функцию checkRole
на странице, которую я хочу ограничить модератором, но администратор также ограничен.Я не знаю, откуда эта ошибка.