mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-16 08:20:14 +01:00
feat: Implement prompt permissions management and access control middleware fix: agent deletion process to remove associated permissions and ACL entries fix: Import Permissions for enhanced access control in GrantAccessDialog feat: use PromptGroup for access control - Added migration script for PromptGroup permissions, categorizing groups into global view access and private groups. - Created unit tests for the migration script to ensure correct categorization and permission granting. - Introduced middleware for checking access permissions on PromptGroups and prompts via their groups. - Updated routes to utilize new access control middleware for PromptGroups. - Enhanced access role definitions to include roles specific to PromptGroups. - Modified ACL entry schema and types to accommodate PromptGroup resource type. - Updated data provider to include new access role identifiers for PromptGroups. feat: add generic access management dialogs and hooks for resource permissions fix: remove duplicate imports in FileContext component fix: remove duplicate mongoose dependency in package.json feat: add access permissions handling for dynamic resource types and add promptGroup roles feat: implement centralized role localization and update access role types refactor: simplify author handling in prompt group routes and enhance ACL checks feat: implement addPromptToGroup functionality and update PromptForm to use it feat: enhance permission handling in ChatGroupItem, DashGroupItem, and PromptForm components chore: rename migration script for prompt group permissions and update package.json scripts chore: update prompt tests
87 lines
2.5 KiB
JavaScript
87 lines
2.5 KiB
JavaScript
const express = require('express');
|
|
const { PermissionBits } = require('@librechat/data-schemas');
|
|
const {
|
|
getUserEffectivePermissions,
|
|
updateResourcePermissions,
|
|
getResourcePermissions,
|
|
getResourceRoles,
|
|
searchPrincipals,
|
|
} = require('~/server/controllers/PermissionsController');
|
|
const { requireJwtAuth, checkBan, uaParser, canAccessResource } = require('~/server/middleware');
|
|
const { checkPeoplePickerAccess } = require('~/server/middleware/checkPeoplePickerAccess');
|
|
|
|
const router = express.Router();
|
|
|
|
// Apply common middleware
|
|
router.use(requireJwtAuth);
|
|
router.use(checkBan);
|
|
router.use(uaParser);
|
|
|
|
/**
|
|
* Generic routes for resource permissions
|
|
* Pattern: /api/permissions/{resourceType}/{resourceId}
|
|
*/
|
|
|
|
/**
|
|
* GET /api/permissions/search-principals
|
|
* Search for users and groups to grant permissions
|
|
*/
|
|
router.get('/search-principals', checkPeoplePickerAccess, searchPrincipals);
|
|
|
|
/**
|
|
* GET /api/permissions/{resourceType}/roles
|
|
* Get available roles for a resource type
|
|
*/
|
|
router.get('/:resourceType/roles', getResourceRoles);
|
|
|
|
/**
|
|
* GET /api/permissions/{resourceType}/{resourceId}
|
|
* Get all permissions for a specific resource
|
|
*/
|
|
router.get('/:resourceType/:resourceId', getResourcePermissions);
|
|
|
|
/**
|
|
* PUT /api/permissions/{resourceType}/{resourceId}
|
|
* Bulk update permissions for a specific resource
|
|
*/
|
|
router.put(
|
|
'/:resourceType/:resourceId',
|
|
// Use middleware that dynamically handles resource type and permissions
|
|
(req, res, next) => {
|
|
const { resourceType } = req.params;
|
|
|
|
// Define resource-specific middleware based on resourceType
|
|
let middleware;
|
|
|
|
if (resourceType === 'agent') {
|
|
middleware = canAccessResource({
|
|
resourceType: 'agent',
|
|
requiredPermission: PermissionBits.SHARE,
|
|
resourceIdParam: 'resourceId',
|
|
});
|
|
} else if (resourceType === 'promptGroup') {
|
|
middleware = canAccessResource({
|
|
resourceType: 'promptGroup',
|
|
requiredPermission: PermissionBits.SHARE,
|
|
resourceIdParam: 'resourceId',
|
|
});
|
|
} else {
|
|
return res.status(400).json({
|
|
error: 'Bad Request',
|
|
message: `Unsupported resource type: ${resourceType}`,
|
|
});
|
|
}
|
|
|
|
// Execute the middleware
|
|
middleware(req, res, next);
|
|
},
|
|
updateResourcePermissions,
|
|
);
|
|
|
|
/**
|
|
* GET /api/permissions/{resourceType}/{resourceId}/effective
|
|
* Get user's effective permissions for a specific resource
|
|
*/
|
|
router.get('/:resourceType/:resourceId/effective', getUserEffectivePermissions);
|
|
|
|
module.exports = router;
|