From 59953387c4b92e1854eb9282b92215457d65a60f Mon Sep 17 00:00:00 2001 From: Sheen Capadngan Date: Fri, 19 Sep 2025 03:28:24 +0800 Subject: [PATCH 1/3] misc: added audit logs for project and org role management operations --- .../v1/deprecated-project-role-router.ts | 61 ++++++++++++++- backend/src/ee/routes/v1/org-role-router.ts | 42 +++++++++++ .../src/ee/routes/v1/project-role-router.ts | 55 +++++++++++++- .../v2/deprecated-project-role-router.ts | 55 +++++++++++++- .../ee/services/audit-log/audit-log-types.ts | 74 ++++++++++++++++++- .../src/hooks/api/auditLogs/constants.tsx | 10 ++- frontend/src/hooks/api/auditLogs/enums.tsx | 10 ++- 7 files changed, 296 insertions(+), 11 deletions(-) diff --git a/backend/src/ee/routes/v1/deprecated-project-role-router.ts b/backend/src/ee/routes/v1/deprecated-project-role-router.ts index d0ffc0239a..8532e5ae7f 100644 --- a/backend/src/ee/routes/v1/deprecated-project-role-router.ts +++ b/backend/src/ee/routes/v1/deprecated-project-role-router.ts @@ -2,6 +2,7 @@ import { packRules } from "@casl/ability/extra"; import { z } from "zod"; import { ProjectMembershipRole, ProjectRolesSchema } from "@app/db/schemas"; +import { EventType } from "@app/ee/services/audit-log/audit-log-types"; import { backfillPermissionV1SchemaToV2Schema, ProjectPermissionV1Schema @@ -50,6 +51,10 @@ export const registerDeprecatedProjectRoleRouter = async (server: FastifyZodProv }, onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), handler: async (req) => { + const stringifiedPermissions = JSON.stringify( + packRules(backfillPermissionV1SchemaToV2Schema(req.body.permissions, true)) + ); + const role = await server.services.projectRole.createRole({ actorAuthMethod: req.permission.authMethod, actorId: req.permission.id, @@ -61,7 +66,22 @@ export const registerDeprecatedProjectRoleRouter = async (server: FastifyZodProv }, data: { ...req.body, - permissions: JSON.stringify(packRules(backfillPermissionV1SchemaToV2Schema(req.body.permissions, true))) + permissions: stringifiedPermissions + } + }); + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + orgId: req.permission.orgId, + projectId: role.projectId, + event: { + type: EventType.CREATE_PROJECT_ROLE, + metadata: { + slug: role.slug, + name: role.name, + description: role.description, + permissions: stringifiedPermissions + } } }); @@ -106,6 +126,10 @@ export const registerDeprecatedProjectRoleRouter = async (server: FastifyZodProv }, onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), handler: async (req) => { + const stringifiedPermissions = req.body.permissions + ? JSON.stringify(packRules(backfillPermissionV1SchemaToV2Schema(req.body.permissions, true))) + : undefined; + const role = await server.services.projectRole.updateRole({ actorAuthMethod: req.permission.authMethod, actorId: req.permission.id, @@ -114,11 +138,26 @@ export const registerDeprecatedProjectRoleRouter = async (server: FastifyZodProv roleId: req.params.roleId, data: { ...req.body, - permissions: req.body.permissions - ? JSON.stringify(packRules(backfillPermissionV1SchemaToV2Schema(req.body.permissions, true))) - : undefined + permissions: stringifiedPermissions + } + }); + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + orgId: req.permission.orgId, + projectId: role.projectId, + event: { + type: EventType.UPDATE_PROJECT_ROLE, + metadata: { + originalName: role.name, + slug: req.body.slug, + name: req.body.name, + description: req.body.description, + permissions: stringifiedPermissions + } } }); + return { role }; } }); @@ -155,6 +194,20 @@ export const registerDeprecatedProjectRoleRouter = async (server: FastifyZodProv actor: req.permission.type, roleId: req.params.roleId }); + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + orgId: req.permission.orgId, + projectId: role.projectId, + event: { + type: EventType.DELETE_PROJECT_ROLE, + metadata: { + slug: role.slug, + name: role.name + } + } + }); + return { role }; } }); diff --git a/backend/src/ee/routes/v1/org-role-router.ts b/backend/src/ee/routes/v1/org-role-router.ts index c8ee03a99b..00d792f83a 100644 --- a/backend/src/ee/routes/v1/org-role-router.ts +++ b/backend/src/ee/routes/v1/org-role-router.ts @@ -1,6 +1,7 @@ import { z } from "zod"; import { OrgMembershipRole, OrgMembershipsSchema, OrgRolesSchema } from "@app/db/schemas"; +import { EventType } from "@app/ee/services/audit-log/audit-log-types"; import { readLimit, writeLimit } from "@app/server/config/rateLimiter"; import { slugSchema } from "@app/server/lib/schemas"; import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; @@ -42,6 +43,21 @@ export const registerOrgRoleRouter = async (server: FastifyZodProvider) => { req.permission.authMethod, req.permission.orgId ); + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + orgId: req.permission.orgId, + event: { + type: EventType.CREATE_ORG_ROLE, + metadata: { + slug: req.body.slug, + name: req.body.name, + description: req.body.description, + permissions: JSON.stringify(req.body.permissions) + } + } + }); + return { role }; } }); @@ -116,6 +132,22 @@ export const registerOrgRoleRouter = async (server: FastifyZodProvider) => { req.permission.authMethod, req.permission.orgId ); + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + orgId: req.permission.orgId, + event: { + type: EventType.UPDATE_ORG_ROLE, + metadata: { + originalName: role.name, + slug: req.body.slug, + name: req.body.name, + description: req.body.description, + permissions: req.body.permissions ? JSON.stringify(req.body.permissions) : undefined + } + } + }); + return { role }; } }); @@ -146,6 +178,16 @@ export const registerOrgRoleRouter = async (server: FastifyZodProvider) => { req.permission.authMethod, req.permission.orgId ); + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + orgId: req.permission.orgId, + event: { + type: EventType.DELETE_ORG_ROLE, + metadata: { slug: role.slug, name: role.name } + } + }); + return { role }; } }); diff --git a/backend/src/ee/routes/v1/project-role-router.ts b/backend/src/ee/routes/v1/project-role-router.ts index 23633c8f53..8c0ff6a775 100644 --- a/backend/src/ee/routes/v1/project-role-router.ts +++ b/backend/src/ee/routes/v1/project-role-router.ts @@ -2,6 +2,7 @@ import { packRules } from "@casl/ability/extra"; import { z } from "zod"; import { ProjectMembershipRole, ProjectRolesSchema } from "@app/db/schemas"; +import { EventType } from "@app/ee/services/audit-log/audit-log-types"; import { checkForInvalidPermissionCombination } from "@app/ee/services/permission/permission-fns"; import { ProjectPermissionV2Schema } from "@app/ee/services/permission/project-permission"; import { ApiDocsTags, PROJECT_ROLE } from "@app/lib/api-docs"; @@ -52,6 +53,8 @@ export const registerProjectRoleRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), handler: async (req) => { + const stringifiedPermissions = JSON.stringify(packRules(req.body.permissions)); + const role = await server.services.projectRole.createRole({ actorAuthMethod: req.permission.authMethod, actorId: req.permission.id, @@ -63,9 +66,25 @@ export const registerProjectRoleRouter = async (server: FastifyZodProvider) => { }, data: { ...req.body, - permissions: JSON.stringify(packRules(req.body.permissions)) + permissions: stringifiedPermissions + } + }); + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + orgId: req.permission.orgId, + projectId: role.projectId, + event: { + type: EventType.CREATE_PROJECT_ROLE, + metadata: { + slug: req.body.slug, + name: req.body.name, + description: req.body.description, + permissions: stringifiedPermissions + } } }); + return { role }; } }); @@ -112,6 +131,7 @@ export const registerProjectRoleRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), handler: async (req) => { + const stringifiedPermissions = req.body.permissions ? JSON.stringify(packRules(req.body.permissions)) : undefined; const role = await server.services.projectRole.updateRole({ actorAuthMethod: req.permission.authMethod, actorId: req.permission.id, @@ -120,9 +140,26 @@ export const registerProjectRoleRouter = async (server: FastifyZodProvider) => { roleId: req.params.roleId, data: { ...req.body, - permissions: req.body.permissions ? JSON.stringify(packRules(req.body.permissions)) : undefined + permissions: stringifiedPermissions } }); + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + orgId: req.permission.orgId, + projectId: role.projectId, + event: { + type: EventType.UPDATE_PROJECT_ROLE, + metadata: { + originalName: role.name, + slug: req.body.slug, + name: req.body.name, + description: req.body.description, + permissions: stringifiedPermissions + } + } + }); + return { role }; } }); @@ -161,6 +198,20 @@ export const registerProjectRoleRouter = async (server: FastifyZodProvider) => { actor: req.permission.type, roleId: req.params.roleId }); + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + orgId: req.permission.orgId, + projectId: role.projectId, + event: { + type: EventType.DELETE_PROJECT_ROLE, + metadata: { + slug: role.slug, + name: role.name + } + } + }); + return { role }; } }); diff --git a/backend/src/ee/routes/v2/deprecated-project-role-router.ts b/backend/src/ee/routes/v2/deprecated-project-role-router.ts index 41a04974de..34b7234fcb 100644 --- a/backend/src/ee/routes/v2/deprecated-project-role-router.ts +++ b/backend/src/ee/routes/v2/deprecated-project-role-router.ts @@ -2,6 +2,7 @@ import { packRules } from "@casl/ability/extra"; import { z } from "zod"; import { ProjectMembershipRole, ProjectRolesSchema } from "@app/db/schemas"; +import { EventType } from "@app/ee/services/audit-log/audit-log-types"; import { checkForInvalidPermissionCombination } from "@app/ee/services/permission/permission-fns"; import { ProjectPermissionV2Schema } from "@app/ee/services/permission/project-permission"; import { ApiDocsTags, PROJECT_ROLE } from "@app/lib/api-docs"; @@ -52,6 +53,8 @@ export const registerDeprecatedProjectRoleRouter = async (server: FastifyZodProv }, onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), handler: async (req) => { + const stringifiedPermissions = JSON.stringify(packRules(req.body.permissions)); + const role = await server.services.projectRole.createRole({ actorAuthMethod: req.permission.authMethod, actorId: req.permission.id, @@ -63,9 +66,25 @@ export const registerDeprecatedProjectRoleRouter = async (server: FastifyZodProv }, data: { ...req.body, - permissions: JSON.stringify(packRules(req.body.permissions)) + permissions: stringifiedPermissions + } + }); + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + orgId: req.permission.orgId, + projectId: role.projectId, + event: { + type: EventType.CREATE_PROJECT_ROLE, + metadata: { + slug: req.body.slug, + name: req.body.name, + description: req.body.description, + permissions: stringifiedPermissions + } } }); + return { role }; } }); @@ -112,6 +131,7 @@ export const registerDeprecatedProjectRoleRouter = async (server: FastifyZodProv }, onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), handler: async (req) => { + const stringifiedPermissions = req.body.permissions ? JSON.stringify(packRules(req.body.permissions)) : undefined; const role = await server.services.projectRole.updateRole({ actorAuthMethod: req.permission.authMethod, actorId: req.permission.id, @@ -120,9 +140,26 @@ export const registerDeprecatedProjectRoleRouter = async (server: FastifyZodProv roleId: req.params.roleId, data: { ...req.body, - permissions: req.body.permissions ? JSON.stringify(packRules(req.body.permissions)) : undefined + permissions: stringifiedPermissions } }); + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + orgId: req.permission.orgId, + projectId: role.projectId, + event: { + type: EventType.UPDATE_PROJECT_ROLE, + metadata: { + originalName: role.name, + slug: req.body.slug, + name: req.body.name, + description: req.body.description, + permissions: stringifiedPermissions + } + } + }); + return { role }; } }); @@ -161,6 +198,20 @@ export const registerDeprecatedProjectRoleRouter = async (server: FastifyZodProv actor: req.permission.type, roleId: req.params.roleId }); + + await server.services.auditLog.createAuditLog({ + ...req.auditLogInfo, + orgId: req.permission.orgId, + projectId: role.projectId, + event: { + type: EventType.DELETE_PROJECT_ROLE, + metadata: { + slug: role.slug, + name: role.name + } + } + }); + return { role }; } }); diff --git a/backend/src/ee/services/audit-log/audit-log-types.ts b/backend/src/ee/services/audit-log/audit-log-types.ts index 07773885ad..205ca8bfcd 100644 --- a/backend/src/ee/services/audit-log/audit-log-types.ts +++ b/backend/src/ee/services/audit-log/audit-log-types.ts @@ -478,6 +478,14 @@ export enum EventType { UPDATE_PROJECT = "update-project", DELETE_PROJECT = "delete-project", + CREATE_PROJECT_ROLE = "create-project-role", + UPDATE_PROJECT_ROLE = "update-project-role", + DELETE_PROJECT_ROLE = "delete-project-role", + + CREATE_ORG_ROLE = "create-org-role", + UPDATE_ORG_ROLE = "update-org-role", + DELETE_ORG_ROLE = "delete-org-role", + CREATE_SECRET_REMINDER = "create-secret-reminder", GET_SECRET_REMINDER = "get-secret-reminder", DELETE_SECRET_REMINDER = "delete-secret-reminder" @@ -3502,6 +3510,64 @@ interface ProjectDeleteEvent { }; } +interface ProjectRoleCreateEvent { + type: EventType.CREATE_PROJECT_ROLE; + metadata: { + slug: string; + name: string; + description?: string | null; + permissions: string; + }; +} + +interface ProjectRoleUpdateEvent { + type: EventType.UPDATE_PROJECT_ROLE; + metadata: { + originalName: string; + slug?: string; + name?: string; + description?: string | null; + permissions?: string; + }; +} + +interface ProjectRoleDeleteEvent { + type: EventType.DELETE_PROJECT_ROLE; + metadata: { + slug: string; + name: string; + }; +} + +interface OrgRoleCreateEvent { + type: EventType.CREATE_ORG_ROLE; + metadata: { + slug: string; + name: string; + description?: string | null; + permissions: string; + }; +} + +interface OrgRoleUpdateEvent { + type: EventType.UPDATE_ORG_ROLE; + metadata: { + originalName: string; + slug?: string; + name?: string; + description?: string | null; + permissions?: string; + }; +} + +interface OrgRoleDeleteEvent { + type: EventType.DELETE_ORG_ROLE; + metadata: { + slug: string; + name: string; + }; +} + export type Event = | GetSecretsEvent | GetSecretEvent @@ -3818,4 +3884,10 @@ export type Event = | ProjectDeleteEvent | SecretReminderCreateEvent | SecretReminderGetEvent - | SecretReminderDeleteEvent; + | SecretReminderDeleteEvent + | ProjectRoleCreateEvent + | ProjectRoleUpdateEvent + | ProjectRoleDeleteEvent + | OrgRoleCreateEvent + | OrgRoleUpdateEvent + | OrgRoleDeleteEvent; diff --git a/frontend/src/hooks/api/auditLogs/constants.tsx b/frontend/src/hooks/api/auditLogs/constants.tsx index 503264fb28..15993023e2 100644 --- a/frontend/src/hooks/api/auditLogs/constants.tsx +++ b/frontend/src/hooks/api/auditLogs/constants.tsx @@ -222,7 +222,15 @@ export const eventToNameMap: { [K in EventType]: string } = { [EventType.UPDATE_ORG]: "Update Organization", [EventType.CREATE_PROJECT]: "Create Project", [EventType.UPDATE_PROJECT]: "Update Project", - [EventType.DELETE_PROJECT]: "Delete Project" + [EventType.DELETE_PROJECT]: "Delete Project", + + [EventType.CREATE_PROJECT_ROLE]: "Create Project Role", + [EventType.UPDATE_PROJECT_ROLE]: "Update Project Role", + [EventType.DELETE_PROJECT_ROLE]: "Delete Project Role", + + [EventType.CREATE_ORG_ROLE]: "Create Org Role", + [EventType.UPDATE_ORG_ROLE]: "Update Org Role", + [EventType.DELETE_ORG_ROLE]: "Delete Org Role" }; export const userAgentTypeToNameMap: { [K in UserAgentType]: string } = { diff --git a/frontend/src/hooks/api/auditLogs/enums.tsx b/frontend/src/hooks/api/auditLogs/enums.tsx index bfa983188d..77baaa9904 100644 --- a/frontend/src/hooks/api/auditLogs/enums.tsx +++ b/frontend/src/hooks/api/auditLogs/enums.tsx @@ -216,5 +216,13 @@ export enum EventType { CREATE_PROJECT = "create-project", UPDATE_PROJECT = "update-project", - DELETE_PROJECT = "delete-project" + DELETE_PROJECT = "delete-project", + + CREATE_PROJECT_ROLE = "create-project-role", + UPDATE_PROJECT_ROLE = "update-project-role", + DELETE_PROJECT_ROLE = "delete-project-role", + + CREATE_ORG_ROLE = "create-org-role", + UPDATE_ORG_ROLE = "update-org-role", + DELETE_ORG_ROLE = "delete-org-role" } From b8bcea5435fe2eb344d1ce548a9b99c5bd12d901 Mon Sep 17 00:00:00 2001 From: Sheen Capadngan Date: Fri, 19 Sep 2025 03:44:56 +0800 Subject: [PATCH 2/3] misc: added role ID tracking --- .../src/ee/routes/v1/deprecated-project-role-router.ts | 4 +++- backend/src/ee/routes/v1/org-role-router.ts | 5 +++-- backend/src/ee/routes/v1/project-role-router.ts | 4 +++- .../src/ee/routes/v2/deprecated-project-role-router.ts | 4 +++- backend/src/ee/services/audit-log/audit-log-types.ts | 8 ++++++-- 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/backend/src/ee/routes/v1/deprecated-project-role-router.ts b/backend/src/ee/routes/v1/deprecated-project-role-router.ts index 8532e5ae7f..b1155acf83 100644 --- a/backend/src/ee/routes/v1/deprecated-project-role-router.ts +++ b/backend/src/ee/routes/v1/deprecated-project-role-router.ts @@ -77,6 +77,7 @@ export const registerDeprecatedProjectRoleRouter = async (server: FastifyZodProv event: { type: EventType.CREATE_PROJECT_ROLE, metadata: { + roleId: role.id, slug: role.slug, name: role.name, description: role.description, @@ -149,7 +150,7 @@ export const registerDeprecatedProjectRoleRouter = async (server: FastifyZodProv event: { type: EventType.UPDATE_PROJECT_ROLE, metadata: { - originalName: role.name, + roleId: role.id, slug: req.body.slug, name: req.body.name, description: req.body.description, @@ -202,6 +203,7 @@ export const registerDeprecatedProjectRoleRouter = async (server: FastifyZodProv event: { type: EventType.DELETE_PROJECT_ROLE, metadata: { + roleId: role.id, slug: role.slug, name: role.name } diff --git a/backend/src/ee/routes/v1/org-role-router.ts b/backend/src/ee/routes/v1/org-role-router.ts index 00d792f83a..070462d47c 100644 --- a/backend/src/ee/routes/v1/org-role-router.ts +++ b/backend/src/ee/routes/v1/org-role-router.ts @@ -50,6 +50,7 @@ export const registerOrgRoleRouter = async (server: FastifyZodProvider) => { event: { type: EventType.CREATE_ORG_ROLE, metadata: { + roleId: role.id, slug: req.body.slug, name: req.body.name, description: req.body.description, @@ -139,7 +140,7 @@ export const registerOrgRoleRouter = async (server: FastifyZodProvider) => { event: { type: EventType.UPDATE_ORG_ROLE, metadata: { - originalName: role.name, + roleId: role.id, slug: req.body.slug, name: req.body.name, description: req.body.description, @@ -184,7 +185,7 @@ export const registerOrgRoleRouter = async (server: FastifyZodProvider) => { orgId: req.permission.orgId, event: { type: EventType.DELETE_ORG_ROLE, - metadata: { slug: role.slug, name: role.name } + metadata: { roleId: role.id, slug: role.slug, name: role.name } } }); diff --git a/backend/src/ee/routes/v1/project-role-router.ts b/backend/src/ee/routes/v1/project-role-router.ts index 8c0ff6a775..5a20ad893d 100644 --- a/backend/src/ee/routes/v1/project-role-router.ts +++ b/backend/src/ee/routes/v1/project-role-router.ts @@ -77,6 +77,7 @@ export const registerProjectRoleRouter = async (server: FastifyZodProvider) => { event: { type: EventType.CREATE_PROJECT_ROLE, metadata: { + roleId: role.id, slug: req.body.slug, name: req.body.name, description: req.body.description, @@ -151,7 +152,7 @@ export const registerProjectRoleRouter = async (server: FastifyZodProvider) => { event: { type: EventType.UPDATE_PROJECT_ROLE, metadata: { - originalName: role.name, + roleId: role.id, slug: req.body.slug, name: req.body.name, description: req.body.description, @@ -206,6 +207,7 @@ export const registerProjectRoleRouter = async (server: FastifyZodProvider) => { event: { type: EventType.DELETE_PROJECT_ROLE, metadata: { + roleId: role.id, slug: role.slug, name: role.name } diff --git a/backend/src/ee/routes/v2/deprecated-project-role-router.ts b/backend/src/ee/routes/v2/deprecated-project-role-router.ts index 34b7234fcb..326bda06a4 100644 --- a/backend/src/ee/routes/v2/deprecated-project-role-router.ts +++ b/backend/src/ee/routes/v2/deprecated-project-role-router.ts @@ -77,6 +77,7 @@ export const registerDeprecatedProjectRoleRouter = async (server: FastifyZodProv event: { type: EventType.CREATE_PROJECT_ROLE, metadata: { + roleId: role.id, slug: req.body.slug, name: req.body.name, description: req.body.description, @@ -151,7 +152,7 @@ export const registerDeprecatedProjectRoleRouter = async (server: FastifyZodProv event: { type: EventType.UPDATE_PROJECT_ROLE, metadata: { - originalName: role.name, + roleId: role.id, slug: req.body.slug, name: req.body.name, description: req.body.description, @@ -206,6 +207,7 @@ export const registerDeprecatedProjectRoleRouter = async (server: FastifyZodProv event: { type: EventType.DELETE_PROJECT_ROLE, metadata: { + roleId: role.id, slug: role.slug, name: role.name } diff --git a/backend/src/ee/services/audit-log/audit-log-types.ts b/backend/src/ee/services/audit-log/audit-log-types.ts index 205ca8bfcd..a6111f6aec 100644 --- a/backend/src/ee/services/audit-log/audit-log-types.ts +++ b/backend/src/ee/services/audit-log/audit-log-types.ts @@ -3513,6 +3513,7 @@ interface ProjectDeleteEvent { interface ProjectRoleCreateEvent { type: EventType.CREATE_PROJECT_ROLE; metadata: { + roleId: string; slug: string; name: string; description?: string | null; @@ -3523,7 +3524,7 @@ interface ProjectRoleCreateEvent { interface ProjectRoleUpdateEvent { type: EventType.UPDATE_PROJECT_ROLE; metadata: { - originalName: string; + roleId: string; slug?: string; name?: string; description?: string | null; @@ -3534,6 +3535,7 @@ interface ProjectRoleUpdateEvent { interface ProjectRoleDeleteEvent { type: EventType.DELETE_PROJECT_ROLE; metadata: { + roleId: string; slug: string; name: string; }; @@ -3542,6 +3544,7 @@ interface ProjectRoleDeleteEvent { interface OrgRoleCreateEvent { type: EventType.CREATE_ORG_ROLE; metadata: { + roleId: string; slug: string; name: string; description?: string | null; @@ -3552,7 +3555,7 @@ interface OrgRoleCreateEvent { interface OrgRoleUpdateEvent { type: EventType.UPDATE_ORG_ROLE; metadata: { - originalName: string; + roleId: string; slug?: string; name?: string; description?: string | null; @@ -3563,6 +3566,7 @@ interface OrgRoleUpdateEvent { interface OrgRoleDeleteEvent { type: EventType.DELETE_ORG_ROLE; metadata: { + roleId: string; slug: string; name: string; }; From b519d00d4ba20720b98b983c3d26e26f2e0c9652 Mon Sep 17 00:00:00 2001 From: Sheen Capadngan Date: Fri, 19 Sep 2025 03:47:06 +0800 Subject: [PATCH 3/3] mics: updated logic to be consistent --- backend/src/ee/routes/v1/deprecated-project-role-router.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/src/ee/routes/v1/deprecated-project-role-router.ts b/backend/src/ee/routes/v1/deprecated-project-role-router.ts index b1155acf83..dc361626d8 100644 --- a/backend/src/ee/routes/v1/deprecated-project-role-router.ts +++ b/backend/src/ee/routes/v1/deprecated-project-role-router.ts @@ -78,9 +78,9 @@ export const registerDeprecatedProjectRoleRouter = async (server: FastifyZodProv type: EventType.CREATE_PROJECT_ROLE, metadata: { roleId: role.id, - slug: role.slug, - name: role.name, - description: role.description, + slug: req.body.slug, + name: req.body.name, + description: req.body.description, permissions: stringifiedPermissions } }