15b21570ae
## Context This PR adds the core structure for RLS implementation: - RLS data model - RLS service layer - RLS WorkspaceMigration and Syncable Entity + cache + Validations - RLS resolver layer - ORM layer with RLS Predicate to ORM WHERE clause conversion with workspaceMember record transposition Tests are missing though <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Establishes core row-level permissions infrastructure and enforcement across the stack. > > - Backend: new `rowLevelPermissionPredicate` and `rowLevelPermissionPredicateGroup` entities, TypeORM migration, feature flag `IS_ROW_LEVEL_PERMISSION_PREDICATES_ENABLED`, flat-entity maps/cache wiring, services and GraphQL resolvers for CRUD, and inclusion of `workspaceMember` in auth context > - ORM: applies row-level permission predicates to SELECT, DELETE, and SOFT DELETE query builders; propagates context through GlobalWorkspaceOrmManager/EntityManager > - GraphQL: generated schema/types/queries/mutations for creating/updating/deleting/fetching predicates and groups > - Frontend: settings page adds a gated "Record-level" section (placeholder) and metadata error handler labels for new entities > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit fe955cc4588a92157afa6795fb574189a4be1e93. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
29 lines
1020 B
TypeScript
29 lines
1020 B
TypeScript
import { type Request } from 'express';
|
|
import { type APP_LOCALES, SOURCE_LOCALE } from 'twenty-shared/translations';
|
|
|
|
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
|
|
|
export const bindDataToRequestObject = (
|
|
data: AuthContext,
|
|
request: Request,
|
|
metadataVersion: number | undefined,
|
|
) => {
|
|
request.user = data.user;
|
|
request.apiKey = data.apiKey;
|
|
request.application = data.application;
|
|
request.userWorkspace = data.userWorkspace;
|
|
request.workspace = data.workspace;
|
|
request.workspaceId = data.workspace?.id;
|
|
request.workspaceMetadataVersion = metadataVersion;
|
|
request.workspaceMemberId = data.workspaceMemberId;
|
|
request.workspaceMember = data.workspaceMember;
|
|
request.userWorkspaceId = data.userWorkspaceId;
|
|
request.authProvider = data.authProvider;
|
|
request.impersonationContext = data.impersonationContext;
|
|
|
|
request.locale =
|
|
data.userWorkspace?.locale ??
|
|
(request.headers['x-locale'] as keyof typeof APP_LOCALES) ??
|
|
SOURCE_LOCALE;
|
|
};
|