Итак, прежде всего, вы должны иметь роль пользователя в вашем req
объекте.Я полагаю, вы сделали это.Затем вы можете указать псевдонимы для ваших ролей в базе данных.Например,
SuperAdmin - superadmin
Admin - admin
Loggedin User - user
Guest(Non Loggedin User) - you do not need to have a role for a guest, you just can check whether user authenticated or not
Пример промежуточного программного обеспечения будет выглядеть как
// Authentication middleware
const isAuthenticated = (roles) => (req, res, next) => {
// `roles` argument is an array of roles
// We check whether user authenticated or not.
// If user authenticated, `req.user` will be object otherwise it will be `undefined`
if(req.user) { // `req.user` is a user object from Database
// Checking whether `req.user` has a corresponded role
if (roles.indexOf(req.user.role) !== -1) next(); // `req.user.role` is string and it may be "admin", "superadmin", or "user"
else res.status(403).send({message: "unauthorized"});
} else {
res.status(401).send({message: "unauthorized"});
}
};
. И вы можете использовать это промежуточное ПО на маршрутизаторе
const express = require('express');
const router = express.Router();
// Example routes
// This route is for guests
router.get('/articles', (req, res) => {
res.send({'article': 'lorem ipsum'})
});
// This route is for authenticated user
router.get('/forOnlyAuthUser', isAuthenticated(['user']) (req, res) => {
res.send({user: req.user})
});
// This route is for admin
router.get('/forOnlyAdmin', isAuthenticated(['admin']) (req, res) => {
res.send({user: req.user})
});
// This route is for superadmin
router.get('/forOnlySuperadmin', isAuthenticated(['superadmin']) (req, res) => {
res.send({user: req.user})
});
// This route is for all authenticated users
router.get('/forOnlyAllAuthUsers', isAuthenticated(['user', 'admin', 'superadmin']) (req, res) => {
res.send({user: req.user})
});
Вы можете настроить функцию isAuthenticated
как хочешь