Попробуйте это решение:
У пользователей модели у вас есть поле "user_type", которое получает целые числа ниже.
// model for user
module.exports = (sequelize, DataTypes) => {
let users = sequelize.define ('users', {
id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, field: 'id' },
name: { type: DataTypes.STRING (50), field: 'name' },
..
user_type: { type: DataTypes.INTEGER, field: 'user_type' } // 0 for admin, 1 for vendor, 2 for customer
},
});
return users;
};
Следующая функция - это файл passport.js, который проверяет, что этоУ пользователя есть правильная роль для достижения этой конечной точки или нет.
passport.isAuthorized = ( userType ) => {
return (req, res, next) => {
if (userType == 0) { // mean its admin
if (req.user.user_type == 0) { // user value stored in req through deserialize fucntion
return next(); // user has correct admin role
} else {
return next({ error: 'Please need admin level access to hit endpoint'
});
}
} else if (userType == 1) { // mean its vendor
if (req.user.user_type == 1) {
return next(); // user has correct vendor role
} else {
return next({ error: 'Please need vendor level access to hit endpoint'
}
} else if (userType == 2) { // mean its custumer
if (req.user.user_type == 2) {
return next(); // user has correct custumer role
} else {
return next({ error: 'Please need customer level access to hit endpoint'
}
}
return next({ error: 'something!went wrong.' });
};
};
В файле маршрутов вам просто нужно добавить эти промежуточные программы.
app.post('baseURL/get-user-list',
passport.isAuthenticated, // check user is authorized or not
passport.isAuthorized(1), // check user role, if you want to check for admin pass 0, for vendor pass 1, for customer pass 2
controllerUser.getUser
);