Performance: Role-based access control
This affects server response time and user interaction speed by controlling access logic before processing requests.
function checkRole(role) {
return (req, res, next) => {
if (!req.user) return res.status(401).send('Unauthorized');
if (req.user.roles.includes(role)) {
next();
} else {
res.status(403).send('Forbidden');
}
};
}
app.get('/admin', checkRole('admin'), (req, res) => {
res.send('Welcome Admin');
});app.use((req, res, next) => {
if (!req.user) return res.status(401).send('Unauthorized');
if (req.user.roles.includes('admin')) {
next();
} else {
res.status(403).send('Forbidden');
}
});| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Global role check middleware on all routes | 0 (server-side) | 0 | 0 | [X] Bad |
| Route-specific role check middleware | 0 (server-side) | 0 | 0 | [OK] Good |
app.get('/admin', checkAdmin, (req, res) => { res.send('Welcome Admin'); });
function checkAdmin(req, res, next) {
if(req.user.role === 'admin') next();
else res.status(403).send('Forbidden');
}function checkRole(req, res, next) {
if(req.user.role = 'admin') {
next();
} else {
res.status(403).send('Access denied');
}
}Pass the test and this pattern moves unknown