mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-09-22 06:00:56 +02:00
🔧 refactor: Integrate PrincipalModel Enum for Principal Handling
- Replaced string literals for principal models ('User', 'Group') with the new PrincipalModel enum across various models, services, and tests to enhance type safety and consistency. - Updated permission handling in multiple files to utilize the PrincipalModel enum, improving maintainability and reducing potential errors. - Ensured all relevant tests reflect these changes to maintain coverage and functionality.
This commit is contained in:
parent
49d1cefe71
commit
28d63dab71
10 changed files with 61 additions and 30 deletions
|
@ -1,5 +1,10 @@
|
|||
import mongoose from 'mongoose';
|
||||
import { ResourceType, PermissionBits, PrincipalType } from 'librechat-data-provider';
|
||||
import {
|
||||
ResourceType,
|
||||
PrincipalType,
|
||||
PrincipalModel,
|
||||
PermissionBits,
|
||||
} from 'librechat-data-provider';
|
||||
import { MongoMemoryServer } from 'mongodb-memory-server';
|
||||
import type * as t from '~/types';
|
||||
import { createAclEntryMethods } from './aclEntry';
|
||||
|
@ -47,7 +52,7 @@ describe('AclEntry Model Tests', () => {
|
|||
expect(entry).toBeDefined();
|
||||
expect(entry?.principalType).toBe(PrincipalType.USER);
|
||||
expect(entry?.principalId?.toString()).toBe(userId.toString());
|
||||
expect(entry?.principalModel).toBe('User');
|
||||
expect(entry?.principalModel).toBe(PrincipalModel.USER);
|
||||
expect(entry?.resourceType).toBe(ResourceType.AGENT);
|
||||
expect(entry?.resourceId.toString()).toBe(resourceId.toString());
|
||||
expect(entry?.permBits).toBe(PermissionBits.VIEW);
|
||||
|
@ -68,7 +73,7 @@ describe('AclEntry Model Tests', () => {
|
|||
expect(entry).toBeDefined();
|
||||
expect(entry?.principalType).toBe(PrincipalType.GROUP);
|
||||
expect(entry?.principalId?.toString()).toBe(groupId.toString());
|
||||
expect(entry?.principalModel).toBe('Group');
|
||||
expect(entry?.principalModel).toBe(PrincipalModel.GROUP);
|
||||
expect(entry?.permBits).toBe(PermissionBits.VIEW | PermissionBits.EDIT);
|
||||
});
|
||||
|
||||
|
@ -469,7 +474,7 @@ describe('AclEntry Model Tests', () => {
|
|||
await AclEntry.create({
|
||||
principalType: PrincipalType.USER,
|
||||
principalId: userId,
|
||||
principalModel: 'User',
|
||||
principalModel: PrincipalModel.USER,
|
||||
resourceType: ResourceType.AGENT,
|
||||
resourceId: childResourceId,
|
||||
permBits: PermissionBits.VIEW,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { PrincipalType } from 'librechat-data-provider';
|
||||
import { PrincipalType, PrincipalModel } from 'librechat-data-provider';
|
||||
import type { Model, Types, DeleteResult, ClientSession } from 'mongoose';
|
||||
import type { IAclEntry } from '~/types';
|
||||
|
||||
|
@ -148,7 +148,8 @@ export function createAclEntryMethods(mongoose: typeof import('mongoose')) {
|
|||
|
||||
if (principalType !== PrincipalType.PUBLIC) {
|
||||
query.principalId = principalId;
|
||||
query.principalModel = principalType === PrincipalType.USER ? 'User' : 'Group';
|
||||
query.principalModel =
|
||||
principalType === PrincipalType.USER ? PrincipalModel.USER : PrincipalModel.GROUP;
|
||||
}
|
||||
|
||||
const update = {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { Schema } from 'mongoose';
|
||||
import { PrincipalType } from 'librechat-data-provider';
|
||||
import { PrincipalType, PrincipalModel, ResourceType } from 'librechat-data-provider';
|
||||
import type { IAclEntry } from '~/types';
|
||||
|
||||
const aclEntrySchema = new Schema<IAclEntry>(
|
||||
|
@ -19,14 +19,14 @@ const aclEntrySchema = new Schema<IAclEntry>(
|
|||
},
|
||||
principalModel: {
|
||||
type: String,
|
||||
enum: ['User', 'Group'],
|
||||
enum: Object.values(PrincipalModel),
|
||||
required: function (this: IAclEntry) {
|
||||
return this.principalType !== PrincipalType.PUBLIC;
|
||||
},
|
||||
},
|
||||
resourceType: {
|
||||
type: String,
|
||||
enum: ['agent', 'project', 'file', 'prompt', 'promptGroup'],
|
||||
enum: Object.values(ResourceType),
|
||||
required: true,
|
||||
},
|
||||
resourceId: {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import type { Document, Types } from 'mongoose';
|
||||
import { PrincipalType } from 'librechat-data-provider';
|
||||
import { PrincipalType, PrincipalModel, ResourceType } from 'librechat-data-provider';
|
||||
|
||||
export type AclEntry = {
|
||||
/** The type of principal ('user', 'group', 'public') */
|
||||
|
@ -7,9 +7,9 @@ export type AclEntry = {
|
|||
/** The ID of the principal (null for 'public') */
|
||||
principalId?: Types.ObjectId;
|
||||
/** The model name for the principal ('User' or 'Group') */
|
||||
principalModel?: 'User' | 'Group';
|
||||
principalModel?: PrincipalModel;
|
||||
/** The type of resource ('agent', 'project', 'file', 'promptGroup') */
|
||||
resourceType: 'agent' | 'project' | 'file' | 'promptGroup';
|
||||
resourceType: ResourceType;
|
||||
/** The ID of the resource */
|
||||
resourceId: Types.ObjectId;
|
||||
/** Permission bits for this entry */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue