| | const { logger } = require('@librechat/data-schemas'); |
| | const { PrincipalType, PermissionTypes, Permissions } = require('librechat-data-provider'); |
| | const { getRoleByName } = require('~/models/Role'); |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | const checkPeoplePickerAccess = async (req, res, next) => { |
| | try { |
| | const user = req.user; |
| | if (!user || !user.role) { |
| | return res.status(401).json({ |
| | error: 'Unauthorized', |
| | message: 'Authentication required', |
| | }); |
| | } |
| |
|
| | const role = await getRoleByName(user.role); |
| | if (!role || !role.permissions) { |
| | return res.status(403).json({ |
| | error: 'Forbidden', |
| | message: 'No permissions configured for user role', |
| | }); |
| | } |
| |
|
| | const { type } = req.query; |
| | const peoplePickerPerms = role.permissions[PermissionTypes.PEOPLE_PICKER] || {}; |
| | const canViewUsers = peoplePickerPerms[Permissions.VIEW_USERS] === true; |
| | const canViewGroups = peoplePickerPerms[Permissions.VIEW_GROUPS] === true; |
| | const canViewRoles = peoplePickerPerms[Permissions.VIEW_ROLES] === true; |
| |
|
| | const permissionChecks = { |
| | [PrincipalType.USER]: { |
| | hasPermission: canViewUsers, |
| | message: 'Insufficient permissions to search for users', |
| | }, |
| | [PrincipalType.GROUP]: { |
| | hasPermission: canViewGroups, |
| | message: 'Insufficient permissions to search for groups', |
| | }, |
| | [PrincipalType.ROLE]: { |
| | hasPermission: canViewRoles, |
| | message: 'Insufficient permissions to search for roles', |
| | }, |
| | }; |
| |
|
| | const check = permissionChecks[type]; |
| | if (check && !check.hasPermission) { |
| | return res.status(403).json({ |
| | error: 'Forbidden', |
| | message: check.message, |
| | }); |
| | } |
| |
|
| | if (!type && !canViewUsers && !canViewGroups && !canViewRoles) { |
| | return res.status(403).json({ |
| | error: 'Forbidden', |
| | message: 'Insufficient permissions to search for users, groups, or roles', |
| | }); |
| | } |
| |
|
| | next(); |
| | } catch (error) { |
| | logger.error( |
| | `[checkPeoplePickerAccess][${req.user?.id}] checkPeoplePickerAccess error for req.query.type = ${req.query.type}`, |
| | error, |
| | ); |
| | return res.status(500).json({ |
| | error: 'Internal Server Error', |
| | message: 'Failed to check permissions', |
| | }); |
| | } |
| | }; |
| |
|
| | module.exports = { |
| | checkPeoplePickerAccess, |
| | }; |
| |
|