Express.js
Beginner
1 min read
Role-Based Access Control (RBAC)
Example
const express = require('express');
const jwt = require('jsonwebtoken');
const router = express.Router();
const SECRET = process.env.JWT_SECRET || 'secret';
// Auth middleware — attaches decoded payload to req.user
function authenticate(req, res, next) {
const [, token] = (req.headers.authorization || '').split(' ');
try {
req.user = jwt.verify(token, SECRET);
next();
} catch {
res.status(401).json({ error: 'Unauthorized' });
}
}
// RBAC middleware factory
function authorize(...roles) {
return (req, res, next) => {
if (!roles.includes(req.user?.role)) {
return res.status(403).json({ error: 'Forbidden' });
}
next();
};
}
// Permission-based guard
function can(permission) {
return (req, res, next) => {
const perms = req.user?.permissions || [];
if (!perms.includes(permission)) {
return res.status(403).json({ error: `Missing permission: ${permission}` });
}
next();
};
}
// Routes
router.get('/admin/dashboard',
authenticate, authorize('admin'), (req, res) => {
res.json({ secret: 'admin data' });
});
router.delete('/posts/:id',
authenticate, can('posts:delete'), (req, res) => {
res.status(204).end();
});
module.exports = router;
Related Resources
Express.js Reference
Complete tag & property list
Express.js How-To Guides
Step-by-step practical guides
Express.js Exercises
Practice what you've learned
More in Express.js