Что вы можете сделать, это добавить это поле в полезную нагрузку JWT при входе в систему, а затем создать функцию промежуточного программного обеспечения, которая проверяет это в качестве второго параметра маршрута ...
Итак, давайтескажем, что это ваша схема User.js
:
const userSchema = new mongoose.Schema({
name: {
type: String,
required: true,
minlength: 5,
maxlength: 50
},
email: {
type: String,
required: true,
minlength: 5,
maxlength: 255,
unique: true
},
password: {
type: String,
required: true,
minlength: 5,
maxlength: 1024
},
isAdmin: Boolean
});
Здесь вы генерируете токен JWT:
userSchema.methods.generateAuthToken = function() {
return jwt.sign({ _id: this._id, isAdmin: this.isAdmin }, config.get('jwtPrivateKey'));
}
Вотпромежуточное ПО для проверки истинности isAdmin:
module.exports = function (req, res, next) {
if (!req.user.isAdmin) return res.status(403).send('Access denied.');
next();
}
И затем вы можете включить его в качестве второго аргумента в обработчик маршрута ... Так что для PUT это будет что-то вроде:
router.put('/:id', [auth, isAdmin, any other middleware...], async (req, res) => {
// handle the route...
});