| const { SystemRoles } = require('librechat-data-provider'); |
| const { getRoleByName } = require('~/models/Role'); |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| const generateCheckAccess = (permissionType, permissions, bodyProps = {}) => { |
| return async (req, res, next) => { |
| try { |
| const { user } = req; |
| if (!user) { |
| return res.status(401).json({ message: 'Authorization required' }); |
| } |
|
|
| if (user.role === SystemRoles.ADMIN) { |
| return next(); |
| } |
|
|
| const role = await getRoleByName(user.role); |
| if (role && role[permissionType]) { |
| const hasAnyPermission = permissions.some((permission) => { |
| if (role[permissionType][permission]) { |
| return true; |
| } |
|
|
| if (bodyProps[permission] && req.body) { |
| return bodyProps[permission].some((prop) => |
| Object.prototype.hasOwnProperty.call(req.body, prop), |
| ); |
| } |
|
|
| return false; |
| }); |
|
|
| if (hasAnyPermission) { |
| return next(); |
| } |
| } |
|
|
| return res.status(403).json({ message: 'Forbidden: Insufficient permissions' }); |
| } catch (error) { |
| return res.status(500).json({ message: `Server error: ${error.message}` }); |
| } |
| }; |
| }; |
|
|
| module.exports = generateCheckAccess; |
|
|