diff --git a/backend/src/db/migrations/20240318183910_group.ts b/backend/src/db/migrations/20240318183910_group.ts index 672b575a6..53014dc53 100644 --- a/backend/src/db/migrations/20240318183910_group.ts +++ b/backend/src/db/migrations/20240318183910_group.ts @@ -37,9 +37,6 @@ export async function up(knex: Knex): Promise { if (!(await knex.schema.hasTable(TableName.GroupProjectMembership))) { await knex.schema.createTable(TableName.GroupProjectMembership, (t) => { t.uuid("id", { primaryKey: true }).defaultTo(knex.fn.uuid()); - t.string("role").notNullable(); - t.uuid("roleId"); - t.foreign("roleId").references("id").inTable(TableName.ProjectRoles); t.string("projectId").notNullable(); t.foreign("projectId").references("id").inTable(TableName.Project).onDelete("CASCADE"); t.uuid("groupId").notNullable(); diff --git a/backend/src/db/schemas/group-project-memberships.ts b/backend/src/db/schemas/group-project-memberships.ts index aaf4e4c20..7787a3574 100644 --- a/backend/src/db/schemas/group-project-memberships.ts +++ b/backend/src/db/schemas/group-project-memberships.ts @@ -9,8 +9,6 @@ import { TImmutableDBKeys } from "./models"; export const GroupProjectMembershipsSchema = z.object({ id: z.string().uuid(), - role: z.string(), - roleId: z.string().uuid().nullable().optional(), projectId: z.string(), groupId: z.string().uuid(), createdAt: z.date(), diff --git a/backend/src/ee/services/license/__mocks__/licence-fns.ts b/backend/src/ee/services/license/__mocks__/licence-fns.ts index 45ee51351..9e7732724 100644 --- a/backend/src/ee/services/license/__mocks__/licence-fns.ts +++ b/backend/src/ee/services/license/__mocks__/licence-fns.ts @@ -12,7 +12,7 @@ export const getDefaultOnPremFeatures = () => { secretVersioning: true, pitRecovery: false, ipAllowlisting: true, - rbac: false, + rbac: true, customRateLimits: false, customAlerts: false, auditLogs: false, diff --git a/backend/src/ee/services/license/licence-fns.ts b/backend/src/ee/services/license/licence-fns.ts index 17a538881..3e0203644 100644 --- a/backend/src/ee/services/license/licence-fns.ts +++ b/backend/src/ee/services/license/licence-fns.ts @@ -19,7 +19,7 @@ export const getDefaultOnPremFeatures = (): TFeatureSet => ({ secretVersioning: true, pitRecovery: false, ipAllowlisting: false, - rbac: false, + rbac: true, customRateLimits: false, customAlerts: false, auditLogs: false, diff --git a/backend/src/ee/services/license/license-types.ts b/backend/src/ee/services/license/license-types.ts index efc1c18dd..ceebfd219 100644 --- a/backend/src/ee/services/license/license-types.ts +++ b/backend/src/ee/services/license/license-types.ts @@ -35,7 +35,7 @@ export type TFeatureSet = { secretVersioning: true; pitRecovery: false; ipAllowlisting: false; - rbac: false; + rbac: true; customRateLimits: false; customAlerts: false; auditLogs: false; diff --git a/backend/src/ee/services/permission/permission-dal.ts b/backend/src/ee/services/permission/permission-dal.ts index 186f5ccca..c7692e565 100644 --- a/backend/src/ee/services/permission/permission-dal.ts +++ b/backend/src/ee/services/permission/permission-dal.ts @@ -73,7 +73,6 @@ export const permissionDALFactory = (db: TDbClient) => { .select( db.ref("id").withSchema(TableName.GroupProjectMembership).as("membershipId"), // TODO(roll-forward-migration): remove this field when we drop this in next migration after a week - db.ref("role").withSchema(TableName.GroupProjectMembership).as("oldRoleField"), db.ref("createdAt").withSchema(TableName.GroupProjectMembership).as("membershipCreatedAt"), db.ref("updatedAt").withSchema(TableName.GroupProjectMembership).as("membershipUpdatedAt"), db.ref("projectId").withSchema(TableName.GroupProjectMembership), @@ -102,7 +101,6 @@ export const permissionDALFactory = (db: TDbClient) => { .select( db.ref("id").withSchema(TableName.ProjectMembership).as("membershipId"), // TODO(roll-forward-migration): remove this field when we drop this in next migration after a week - db.ref("role").withSchema(TableName.ProjectMembership).as("oldRoleField"), db.ref("createdAt").withSchema(TableName.ProjectMembership).as("membershipCreatedAt"), db.ref("updatedAt").withSchema(TableName.ProjectMembership).as("membershipUpdatedAt"), db.ref("projectId").withSchema(TableName.ProjectMembership), @@ -115,18 +113,11 @@ export const permissionDALFactory = (db: TDbClient) => { const permission = sqlNestRelationships({ data: docs.concat(groupDocs), key: "projectId", - parentMapper: ({ - orgId, - orgAuthEnforced, - membershipId, - membershipCreatedAt, - membershipUpdatedAt, - oldRoleField - }) => ({ + parentMapper: ({ orgId, orgAuthEnforced, membershipId, membershipCreatedAt, membershipUpdatedAt, role }) => ({ orgId, orgAuthEnforced, userId, - role: oldRoleField, + role, id: membershipId, projectId, createdAt: membershipCreatedAt, diff --git a/backend/src/services/group-project/group-project-service.ts b/backend/src/services/group-project/group-project-service.ts index 9b8d698a5..4b689f906 100644 --- a/backend/src/services/group-project/group-project-service.ts +++ b/backend/src/services/group-project/group-project-service.ts @@ -102,9 +102,7 @@ export const groupProjectServiceFactory = ({ const groupProjectMembership = await groupProjectDAL.create( { groupId: group.id, - projectId: project.id, - role: isCustomRole ? ProjectMembershipRole.Custom : role, - roleId: customRole?.id + projectId: project.id }, tx ); @@ -212,14 +210,6 @@ export const groupProjectServiceFactory = ({ const projectGroup = await groupProjectDAL.findOne({ groupId: group.id, projectId: project.id }); if (!projectGroup) throw new BadRequestError({ message: `Failed to find group with slug ${groupSlug}` }); - const { permission: groupRolePermission } = await permissionService.getProjectPermissionByRole( - projectGroup.role, - project.id - ); - - const hasRequiredPriviledges = isAtLeastAsPrivileged(permission, groupRolePermission); - if (!hasRequiredPriviledges) throw new ForbiddenRequestError({ message: "Failed to delete more privileged group" }); - // validate custom roles input const customInputRoles = roles.filter( ({ role }) => !Object.values(ProjectMembershipRole).includes(role as ProjectMembershipRole) @@ -295,12 +285,6 @@ export const groupProjectServiceFactory = ({ actorOrgId ); ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Delete, ProjectPermissionSub.Groups); - const { permission: groupRolePermission } = await permissionService.getProjectPermissionByRole( - groupProjectMembership.role, - project.id - ); - const hasRequiredPriviledges = isAtLeastAsPrivileged(permission, groupRolePermission); - if (!hasRequiredPriviledges) throw new ForbiddenRequestError({ message: "Failed to delete more privileged group" }); const groupMembers = await userGroupMembershipDAL.findGroupMembersNotInProject(group.id, project.id);