Files
gameno-api/middlewares/permissionMiddleware.js
T
kavehhn 877dfa65d5 fix: treat SuperAdmin role name case-insensitively in permission checks
The seeded role is SuperAdmin, but the middleware only matched superAdmin, so SuperAdmin could be denied documents and other new permissions.
2026-08-15 03:27:21 +03:30

36 lines
924 B
JavaScript

// /middlewares/permissionMiddleware.js
const AppError = require('../utils/AppError');
const requirePermission = (requiredPermission) => {
return (req, res, next) => {
try {
if (!req.user) {
return next(new AppError('UNAUTHORIZED'));
}
const role = req.user.role;
if (!role) {
return next(new AppError('FORBIDDEN'));
}
const roleName = String(role.name || '').toLowerCase();
if (roleName === 'superadmin' || (role.isSystem && role.permissions.includes('*'))) {
return next();
}
// Check if required permission is held by role
if (Array.isArray(role.permissions) && role.permissions.includes(requiredPermission)) {
return next();
}
return next(new AppError('FORBIDDEN'));
} catch (error) {
next(error);
}
};
};
module.exports = requirePermission;
module.exports.requires = requirePermission;