diff --git a/backend/src/ee/services/permission/org-permission.ts b/backend/src/ee/services/permission/org-permission.ts index d4155d02cd..89a5180329 100644 --- a/backend/src/ee/services/permission/org-permission.ts +++ b/backend/src/ee/services/permission/org-permission.ts @@ -87,6 +87,7 @@ export enum OrgPermissionBillingActions { export enum OrgPermissionSubjects { Workspace = "workspace", + Project = "project", Role = "role", Member = "member", Settings = "settings", @@ -117,6 +118,7 @@ export type AppConnectionSubjectFields = { export type OrgPermissionSet = | [OrgPermissionActions.Create, OrgPermissionSubjects.Workspace] + | [OrgPermissionActions.Create, OrgPermissionSubjects.Project] | [OrgPermissionActions, OrgPermissionSubjects.Role] | [OrgPermissionActions, OrgPermissionSubjects.Member] | [OrgPermissionActions, OrgPermissionSubjects.Settings] @@ -166,6 +168,10 @@ export const OrgPermissionSchema = z.discriminatedUnion("subject", [ subject: z.literal(OrgPermissionSubjects.Workspace).describe("The entity this permission pertains to."), action: CASL_ACTION_SCHEMA_ENUM([OrgPermissionActions.Create]).describe("Describe what action an entity can take.") }), + z.object({ + subject: z.literal(OrgPermissionSubjects.Project).describe("The entity this permission pertains to."), + action: CASL_ACTION_SCHEMA_ENUM([OrgPermissionActions.Create]).describe("Describe what action an entity can take.") + }), z.object({ subject: z.literal(OrgPermissionSubjects.Role).describe("The entity this permission pertains to."), action: CASL_ACTION_SCHEMA_NATIVE_ENUM(OrgPermissionActions).describe("Describe what action an entity can take.") @@ -280,6 +286,7 @@ const buildAdminPermission = () => { const { can, rules } = new AbilityBuilder>(createMongoAbility); // ws permissions can(OrgPermissionActions.Create, OrgPermissionSubjects.Workspace); + can(OrgPermissionActions.Create, OrgPermissionSubjects.Project); // role permission can(OrgPermissionActions.Read, OrgPermissionSubjects.Role); can(OrgPermissionActions.Create, OrgPermissionSubjects.Role); @@ -413,6 +420,7 @@ const buildMemberPermission = () => { const { can, rules } = new AbilityBuilder>(createMongoAbility); can(OrgPermissionActions.Create, OrgPermissionSubjects.Workspace); + can(OrgPermissionActions.Create, OrgPermissionSubjects.Project); can(OrgPermissionActions.Read, OrgPermissionSubjects.Member); can(OrgPermissionGroupActions.Read, OrgPermissionSubjects.Groups); can(OrgPermissionActions.Read, OrgPermissionSubjects.Role); diff --git a/backend/src/services/project/project-service.ts b/backend/src/services/project/project-service.ts index b10432e0a8..c19041e513 100644 --- a/backend/src/services/project/project-service.ts +++ b/backend/src/services/project/project-service.ts @@ -254,7 +254,13 @@ export const projectServiceFactory = ({ actorAuthMethod, actorOrgId ); - ForbiddenError.from(permission).throwUnlessCan(OrgPermissionActions.Create, OrgPermissionSubjects.Workspace); + + if ( + permission.cannot(OrgPermissionActions.Create, OrgPermissionSubjects.Workspace) && + permission.cannot(OrgPermissionActions.Create, OrgPermissionSubjects.Project) + ) { + throw new ForbiddenRequestError({ message: "You don't have permission to create a project" }); + } const results = await (trx || projectDAL).transaction(async (tx) => { await tx.raw("SELECT pg_advisory_xact_lock(?)", [PgSqlLock.CreateProject(organization.id)]); diff --git a/docs/api-reference/endpoints/depreciated/environments/create.mdx b/docs/api-reference/endpoints/deprecated/environments/create.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/environments/create.mdx rename to docs/api-reference/endpoints/deprecated/environments/create.mdx diff --git a/docs/api-reference/endpoints/depreciated/environments/delete.mdx b/docs/api-reference/endpoints/deprecated/environments/delete.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/environments/delete.mdx rename to docs/api-reference/endpoints/deprecated/environments/delete.mdx diff --git a/docs/api-reference/endpoints/depreciated/environments/update.mdx b/docs/api-reference/endpoints/deprecated/environments/update.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/environments/update.mdx rename to docs/api-reference/endpoints/deprecated/environments/update.mdx diff --git a/docs/api-reference/endpoints/depreciated/folders/create.mdx b/docs/api-reference/endpoints/deprecated/folders/create.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/folders/create.mdx rename to docs/api-reference/endpoints/deprecated/folders/create.mdx diff --git a/docs/api-reference/endpoints/depreciated/folders/delete.mdx b/docs/api-reference/endpoints/deprecated/folders/delete.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/folders/delete.mdx rename to docs/api-reference/endpoints/deprecated/folders/delete.mdx diff --git a/docs/api-reference/endpoints/depreciated/folders/get-by-id.mdx b/docs/api-reference/endpoints/deprecated/folders/get-by-id.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/folders/get-by-id.mdx rename to docs/api-reference/endpoints/deprecated/folders/get-by-id.mdx diff --git a/docs/api-reference/endpoints/depreciated/folders/list.mdx b/docs/api-reference/endpoints/deprecated/folders/list.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/folders/list.mdx rename to docs/api-reference/endpoints/deprecated/folders/list.mdx diff --git a/docs/api-reference/endpoints/depreciated/folders/update.mdx b/docs/api-reference/endpoints/deprecated/folders/update.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/folders/update.mdx rename to docs/api-reference/endpoints/deprecated/folders/update.mdx diff --git a/docs/api-reference/endpoints/depreciated/organizations/projects.mdx b/docs/api-reference/endpoints/deprecated/organizations/projects.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/organizations/projects.mdx rename to docs/api-reference/endpoints/deprecated/organizations/projects.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-groups/create.mdx b/docs/api-reference/endpoints/deprecated/project-groups/create.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-groups/create.mdx rename to docs/api-reference/endpoints/deprecated/project-groups/create.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-groups/delete.mdx b/docs/api-reference/endpoints/deprecated/project-groups/delete.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-groups/delete.mdx rename to docs/api-reference/endpoints/deprecated/project-groups/delete.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-groups/get-by-id.mdx b/docs/api-reference/endpoints/deprecated/project-groups/get-by-id.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-groups/get-by-id.mdx rename to docs/api-reference/endpoints/deprecated/project-groups/get-by-id.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-groups/list.mdx b/docs/api-reference/endpoints/deprecated/project-groups/list.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-groups/list.mdx rename to docs/api-reference/endpoints/deprecated/project-groups/list.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-groups/update.mdx b/docs/api-reference/endpoints/deprecated/project-groups/update.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-groups/update.mdx rename to docs/api-reference/endpoints/deprecated/project-groups/update.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-identities/add-identity-membership.mdx b/docs/api-reference/endpoints/deprecated/project-identities/add-identity-membership.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-identities/add-identity-membership.mdx rename to docs/api-reference/endpoints/deprecated/project-identities/add-identity-membership.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-identities/delete-identity-membership.mdx b/docs/api-reference/endpoints/deprecated/project-identities/delete-identity-membership.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-identities/delete-identity-membership.mdx rename to docs/api-reference/endpoints/deprecated/project-identities/delete-identity-membership.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-identities/get-by-id.mdx b/docs/api-reference/endpoints/deprecated/project-identities/get-by-id.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-identities/get-by-id.mdx rename to docs/api-reference/endpoints/deprecated/project-identities/get-by-id.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-identities/list-identity-memberships.mdx b/docs/api-reference/endpoints/deprecated/project-identities/list-identity-memberships.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-identities/list-identity-memberships.mdx rename to docs/api-reference/endpoints/deprecated/project-identities/list-identity-memberships.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-identities/update-identity-membership.mdx b/docs/api-reference/endpoints/deprecated/project-identities/update-identity-membership.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-identities/update-identity-membership.mdx rename to docs/api-reference/endpoints/deprecated/project-identities/update-identity-membership.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-roles/create.mdx b/docs/api-reference/endpoints/deprecated/project-roles/create.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-roles/create.mdx rename to docs/api-reference/endpoints/deprecated/project-roles/create.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-roles/delete.mdx b/docs/api-reference/endpoints/deprecated/project-roles/delete.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-roles/delete.mdx rename to docs/api-reference/endpoints/deprecated/project-roles/delete.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-roles/get-by-slug.mdx b/docs/api-reference/endpoints/deprecated/project-roles/get-by-slug.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-roles/get-by-slug.mdx rename to docs/api-reference/endpoints/deprecated/project-roles/get-by-slug.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-roles/list.mdx b/docs/api-reference/endpoints/deprecated/project-roles/list.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-roles/list.mdx rename to docs/api-reference/endpoints/deprecated/project-roles/list.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-roles/update.mdx b/docs/api-reference/endpoints/deprecated/project-roles/update.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-roles/update.mdx rename to docs/api-reference/endpoints/deprecated/project-roles/update.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-users/delete-membership.mdx b/docs/api-reference/endpoints/deprecated/project-users/delete-membership.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-users/delete-membership.mdx rename to docs/api-reference/endpoints/deprecated/project-users/delete-membership.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-users/get-by-username.mdx b/docs/api-reference/endpoints/deprecated/project-users/get-by-username.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-users/get-by-username.mdx rename to docs/api-reference/endpoints/deprecated/project-users/get-by-username.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-users/invite-member-to-project.mdx b/docs/api-reference/endpoints/deprecated/project-users/invite-member-to-project.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-users/invite-member-to-project.mdx rename to docs/api-reference/endpoints/deprecated/project-users/invite-member-to-project.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-users/memberships.mdx b/docs/api-reference/endpoints/deprecated/project-users/memberships.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-users/memberships.mdx rename to docs/api-reference/endpoints/deprecated/project-users/memberships.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-users/remove-member-from-project.mdx b/docs/api-reference/endpoints/deprecated/project-users/remove-member-from-project.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-users/remove-member-from-project.mdx rename to docs/api-reference/endpoints/deprecated/project-users/remove-member-from-project.mdx diff --git a/docs/api-reference/endpoints/depreciated/project-users/update-membership.mdx b/docs/api-reference/endpoints/deprecated/project-users/update-membership.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/project-users/update-membership.mdx rename to docs/api-reference/endpoints/deprecated/project-users/update-membership.mdx diff --git a/docs/api-reference/endpoints/depreciated/projects/create-project.mdx b/docs/api-reference/endpoints/deprecated/projects/create-project.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/projects/create-project.mdx rename to docs/api-reference/endpoints/deprecated/projects/create-project.mdx diff --git a/docs/api-reference/endpoints/depreciated/projects/delete-project.mdx b/docs/api-reference/endpoints/deprecated/projects/delete-project.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/projects/delete-project.mdx rename to docs/api-reference/endpoints/deprecated/projects/delete-project.mdx diff --git a/docs/api-reference/endpoints/depreciated/projects/get-project-by-slug.mdx b/docs/api-reference/endpoints/deprecated/projects/get-project-by-slug.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/projects/get-project-by-slug.mdx rename to docs/api-reference/endpoints/deprecated/projects/get-project-by-slug.mdx diff --git a/docs/api-reference/endpoints/depreciated/projects/get-project.mdx b/docs/api-reference/endpoints/deprecated/projects/get-project.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/projects/get-project.mdx rename to docs/api-reference/endpoints/deprecated/projects/get-project.mdx diff --git a/docs/api-reference/endpoints/depreciated/projects/project-key.mdx b/docs/api-reference/endpoints/deprecated/projects/project-key.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/projects/project-key.mdx rename to docs/api-reference/endpoints/deprecated/projects/project-key.mdx diff --git a/docs/api-reference/endpoints/depreciated/projects/project-workspace.mdx b/docs/api-reference/endpoints/deprecated/projects/project-workspace.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/projects/project-workspace.mdx rename to docs/api-reference/endpoints/deprecated/projects/project-workspace.mdx diff --git a/docs/api-reference/endpoints/depreciated/projects/rollback-snapshot.mdx b/docs/api-reference/endpoints/deprecated/projects/rollback-snapshot.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/projects/rollback-snapshot.mdx rename to docs/api-reference/endpoints/deprecated/projects/rollback-snapshot.mdx diff --git a/docs/api-reference/endpoints/depreciated/projects/secret-snapshots.mdx b/docs/api-reference/endpoints/deprecated/projects/secret-snapshots.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/projects/secret-snapshots.mdx rename to docs/api-reference/endpoints/deprecated/projects/secret-snapshots.mdx diff --git a/docs/api-reference/endpoints/depreciated/projects/update-project.mdx b/docs/api-reference/endpoints/deprecated/projects/update-project.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/projects/update-project.mdx rename to docs/api-reference/endpoints/deprecated/projects/update-project.mdx diff --git a/docs/api-reference/endpoints/depreciated/secret-imports/create.mdx b/docs/api-reference/endpoints/deprecated/secret-imports/create.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/secret-imports/create.mdx rename to docs/api-reference/endpoints/deprecated/secret-imports/create.mdx diff --git a/docs/api-reference/endpoints/depreciated/secret-imports/delete.mdx b/docs/api-reference/endpoints/deprecated/secret-imports/delete.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/secret-imports/delete.mdx rename to docs/api-reference/endpoints/deprecated/secret-imports/delete.mdx diff --git a/docs/api-reference/endpoints/depreciated/secret-imports/list.mdx b/docs/api-reference/endpoints/deprecated/secret-imports/list.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/secret-imports/list.mdx rename to docs/api-reference/endpoints/deprecated/secret-imports/list.mdx diff --git a/docs/api-reference/endpoints/depreciated/secret-imports/update.mdx b/docs/api-reference/endpoints/deprecated/secret-imports/update.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/secret-imports/update.mdx rename to docs/api-reference/endpoints/deprecated/secret-imports/update.mdx diff --git a/docs/api-reference/endpoints/depreciated/secret-tags/create.mdx b/docs/api-reference/endpoints/deprecated/secret-tags/create.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/secret-tags/create.mdx rename to docs/api-reference/endpoints/deprecated/secret-tags/create.mdx diff --git a/docs/api-reference/endpoints/depreciated/secret-tags/delete.mdx b/docs/api-reference/endpoints/deprecated/secret-tags/delete.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/secret-tags/delete.mdx rename to docs/api-reference/endpoints/deprecated/secret-tags/delete.mdx diff --git a/docs/api-reference/endpoints/depreciated/secret-tags/get-by-id.mdx b/docs/api-reference/endpoints/deprecated/secret-tags/get-by-id.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/secret-tags/get-by-id.mdx rename to docs/api-reference/endpoints/deprecated/secret-tags/get-by-id.mdx diff --git a/docs/api-reference/endpoints/depreciated/secret-tags/get-by-slug.mdx b/docs/api-reference/endpoints/deprecated/secret-tags/get-by-slug.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/secret-tags/get-by-slug.mdx rename to docs/api-reference/endpoints/deprecated/secret-tags/get-by-slug.mdx diff --git a/docs/api-reference/endpoints/depreciated/secret-tags/list.mdx b/docs/api-reference/endpoints/deprecated/secret-tags/list.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/secret-tags/list.mdx rename to docs/api-reference/endpoints/deprecated/secret-tags/list.mdx diff --git a/docs/api-reference/endpoints/depreciated/secret-tags/update.mdx b/docs/api-reference/endpoints/deprecated/secret-tags/update.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/secret-tags/update.mdx rename to docs/api-reference/endpoints/deprecated/secret-tags/update.mdx diff --git a/docs/api-reference/endpoints/depreciated/secrets/attach-tags.mdx b/docs/api-reference/endpoints/deprecated/secrets/attach-tags.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/secrets/attach-tags.mdx rename to docs/api-reference/endpoints/deprecated/secrets/attach-tags.mdx diff --git a/docs/api-reference/endpoints/depreciated/secrets/create-many.mdx b/docs/api-reference/endpoints/deprecated/secrets/create-many.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/secrets/create-many.mdx rename to docs/api-reference/endpoints/deprecated/secrets/create-many.mdx diff --git a/docs/api-reference/endpoints/depreciated/secrets/create.mdx b/docs/api-reference/endpoints/deprecated/secrets/create.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/secrets/create.mdx rename to docs/api-reference/endpoints/deprecated/secrets/create.mdx diff --git a/docs/api-reference/endpoints/depreciated/secrets/delete-many.mdx b/docs/api-reference/endpoints/deprecated/secrets/delete-many.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/secrets/delete-many.mdx rename to docs/api-reference/endpoints/deprecated/secrets/delete-many.mdx diff --git a/docs/api-reference/endpoints/depreciated/secrets/delete.mdx b/docs/api-reference/endpoints/deprecated/secrets/delete.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/secrets/delete.mdx rename to docs/api-reference/endpoints/deprecated/secrets/delete.mdx diff --git a/docs/api-reference/endpoints/depreciated/secrets/detach-tags.mdx b/docs/api-reference/endpoints/deprecated/secrets/detach-tags.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/secrets/detach-tags.mdx rename to docs/api-reference/endpoints/deprecated/secrets/detach-tags.mdx diff --git a/docs/api-reference/endpoints/depreciated/secrets/list.mdx b/docs/api-reference/endpoints/deprecated/secrets/list.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/secrets/list.mdx rename to docs/api-reference/endpoints/deprecated/secrets/list.mdx diff --git a/docs/api-reference/endpoints/depreciated/secrets/read.mdx b/docs/api-reference/endpoints/deprecated/secrets/read.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/secrets/read.mdx rename to docs/api-reference/endpoints/deprecated/secrets/read.mdx diff --git a/docs/api-reference/endpoints/depreciated/secrets/update-many.mdx b/docs/api-reference/endpoints/deprecated/secrets/update-many.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/secrets/update-many.mdx rename to docs/api-reference/endpoints/deprecated/secrets/update-many.mdx diff --git a/docs/api-reference/endpoints/depreciated/secrets/update.mdx b/docs/api-reference/endpoints/deprecated/secrets/update.mdx similarity index 100% rename from docs/api-reference/endpoints/depreciated/secrets/update.mdx rename to docs/api-reference/endpoints/deprecated/secrets/update.mdx diff --git a/docs/docs.json b/docs/docs.json index 32e49119c8..51a125730b 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -1008,7 +1008,13 @@ "api-reference/endpoints/organizations/update-membership", "api-reference/endpoints/organizations/delete-membership", "api-reference/endpoints/organizations/bulk-delete-memberships", - "api-reference/endpoints/organizations/list-identity-memberships" + "api-reference/endpoints/organizations/list-identity-memberships", + { + "group": "To be deprecated", + "pages": [ + "api-reference/endpoints/deprecated/organizations/projects" + ] + } ] }, { @@ -1019,7 +1025,18 @@ "api-reference/endpoints/projects/delete-project", "api-reference/endpoints/projects/get-project", "api-reference/endpoints/projects/update-project", - "api-reference/endpoints/projects/secret-snapshots" + "api-reference/endpoints/projects/secret-snapshots", + { + "group": "To be deprecated", + "pages": [ + "api-reference/endpoints/deprecated/projects/get-project-by-slug", + "api-reference/endpoints/deprecated/projects/create-project", + "api-reference/endpoints/deprecated/projects/delete-project", + "api-reference/endpoints/deprecated/projects/get-project", + "api-reference/endpoints/deprecated/projects/update-project", + "api-reference/endpoints/deprecated/projects/secret-snapshots" + ] + } ] }, { @@ -1029,7 +1046,17 @@ "api-reference/endpoints/project-users/remove-member-from-project", "api-reference/endpoints/project-users/memberships", "api-reference/endpoints/project-users/get-by-username", - "api-reference/endpoints/project-users/update-membership" + "api-reference/endpoints/project-users/update-membership", + { + "group": "To be deprecated", + "pages": [ + "api-reference/endpoints/deprecated/project-users/invite-member-to-project", + "api-reference/endpoints/deprecated/project-users/remove-member-from-project", + "api-reference/endpoints/deprecated/project-users/memberships", + "api-reference/endpoints/deprecated/project-users/get-by-username", + "api-reference/endpoints/deprecated/project-users/update-membership" + ] + } ] }, { @@ -1039,7 +1066,17 @@ "api-reference/endpoints/project-groups/delete", "api-reference/endpoints/project-groups/get-by-id", "api-reference/endpoints/project-groups/list", - "api-reference/endpoints/project-groups/update" + "api-reference/endpoints/project-groups/update", + { + "group": "To be deprecated", + "pages": [ + "api-reference/endpoints/deprecated/project-groups/create", + "api-reference/endpoints/deprecated/project-groups/delete", + "api-reference/endpoints/deprecated/project-groups/get-by-id", + "api-reference/endpoints/deprecated/project-groups/list", + "api-reference/endpoints/deprecated/project-groups/update" + ] + } ] }, { @@ -1049,7 +1086,17 @@ "api-reference/endpoints/project-identities/list-identity-memberships", "api-reference/endpoints/project-identities/get-by-id", "api-reference/endpoints/project-identities/update-identity-membership", - "api-reference/endpoints/project-identities/delete-identity-membership" + "api-reference/endpoints/project-identities/delete-identity-membership", + { + "group": "To be deprecated", + "pages": [ + "api-reference/endpoints/deprecated/project-identities/add-identity-membership", + "api-reference/endpoints/deprecated/project-identities/list-identity-memberships", + "api-reference/endpoints/deprecated/project-identities/get-by-id", + "api-reference/endpoints/deprecated/project-identities/update-identity-membership", + "api-reference/endpoints/deprecated/project-identities/delete-identity-membership" + ] + } ] }, { @@ -1059,7 +1106,17 @@ "api-reference/endpoints/project-roles/update", "api-reference/endpoints/project-roles/delete", "api-reference/endpoints/project-roles/get-by-slug", - "api-reference/endpoints/project-roles/list" + "api-reference/endpoints/project-roles/list", + { + "group": "To be deprecated", + "pages": [ + "api-reference/endpoints/deprecated/project-roles/create", + "api-reference/endpoints/deprecated/project-roles/update", + "api-reference/endpoints/deprecated/project-roles/delete", + "api-reference/endpoints/deprecated/project-roles/get-by-slug", + "api-reference/endpoints/deprecated/project-roles/list" + ] + } ] }, { @@ -1077,7 +1134,15 @@ "pages": [ "api-reference/endpoints/environments/create", "api-reference/endpoints/environments/update", - "api-reference/endpoints/environments/delete" + "api-reference/endpoints/environments/delete", + { + "group": "To be deprecated", + "pages": [ + "api-reference/endpoints/deprecated/environments/create", + "api-reference/endpoints/deprecated/environments/update", + "api-reference/endpoints/deprecated/environments/delete" + ] + } ] }, { @@ -1087,7 +1152,17 @@ "api-reference/endpoints/folders/get-by-id", "api-reference/endpoints/folders/create", "api-reference/endpoints/folders/update", - "api-reference/endpoints/folders/delete" + "api-reference/endpoints/folders/delete", + { + "group": "To be deprecated", + "pages": [ + "api-reference/endpoints/deprecated/folders/list", + "api-reference/endpoints/deprecated/folders/get-by-id", + "api-reference/endpoints/deprecated/folders/create", + "api-reference/endpoints/deprecated/folders/update", + "api-reference/endpoints/deprecated/folders/delete" + ] + } ] }, { @@ -1098,7 +1173,18 @@ "api-reference/endpoints/secret-tags/get-by-slug", "api-reference/endpoints/secret-tags/create", "api-reference/endpoints/secret-tags/update", - "api-reference/endpoints/secret-tags/delete" + "api-reference/endpoints/secret-tags/delete", + { + "group": "To be deprecated", + "pages": [ + "api-reference/endpoints/deprecated/secret-tags/list", + "api-reference/endpoints/deprecated/secret-tags/get-by-id", + "api-reference/endpoints/deprecated/secret-tags/get-by-slug", + "api-reference/endpoints/deprecated/secret-tags/create", + "api-reference/endpoints/deprecated/secret-tags/update", + "api-reference/endpoints/deprecated/secret-tags/delete" + ] + } ] }, { @@ -1111,7 +1197,22 @@ "api-reference/endpoints/secrets/delete", "api-reference/endpoints/secrets/create-many", "api-reference/endpoints/secrets/update-many", - "api-reference/endpoints/secrets/delete-many" + "api-reference/endpoints/secrets/delete-many", + { + "group": "To be deprecated", + "pages": [ + "api-reference/endpoints/deprecated/secrets/list", + "api-reference/endpoints/deprecated/secrets/create", + "api-reference/endpoints/deprecated/secrets/read", + "api-reference/endpoints/deprecated/secrets/update", + "api-reference/endpoints/deprecated/secrets/delete", + "api-reference/endpoints/deprecated/secrets/create-many", + "api-reference/endpoints/deprecated/secrets/update-many", + "api-reference/endpoints/deprecated/secrets/delete-many", + "api-reference/endpoints/deprecated/secrets/attach-tags", + "api-reference/endpoints/deprecated/secrets/detach-tags" + ] + } ] }, { @@ -1141,7 +1242,16 @@ "api-reference/endpoints/secret-imports/list", "api-reference/endpoints/secret-imports/create", "api-reference/endpoints/secret-imports/update", - "api-reference/endpoints/secret-imports/delete" + "api-reference/endpoints/secret-imports/delete", + { + "group": "To be deprecated", + "pages": [ + "api-reference/endpoints/deprecated/secret-imports/list", + "api-reference/endpoints/deprecated/secret-imports/create", + "api-reference/endpoints/deprecated/secret-imports/update", + "api-reference/endpoints/deprecated/secret-imports/delete" + ] + } ] }, { @@ -2460,121 +2570,6 @@ ] } ] - }, - { - "group": "To be depreciated", - "pages": [ - { - "group": "Organizations", - "pages": [ - "api-reference/endpoints/depreciated/organizations/projects" - ] - }, - { - "group": "Projects", - "pages": [ - "api-reference/endpoints/depreciated/projects/get-project-by-slug", - "api-reference/endpoints/depreciated/projects/create-project", - "api-reference/endpoints/depreciated/projects/delete-project", - "api-reference/endpoints/depreciated/projects/get-project", - "api-reference/endpoints/depreciated/projects/update-project", - "api-reference/endpoints/depreciated/projects/secret-snapshots" - ] - }, - { - "group": "Project Users", - "pages": [ - "api-reference/endpoints/depreciated/project-users/invite-member-to-project", - "api-reference/endpoints/depreciated/project-users/remove-member-from-project", - "api-reference/endpoints/depreciated/project-users/memberships", - "api-reference/endpoints/depreciated/project-users/get-by-username", - "api-reference/endpoints/depreciated/project-users/update-membership" - ] - }, - { - "group": "Project Groups", - "pages": [ - "api-reference/endpoints/depreciated/project-groups/create", - "api-reference/endpoints/depreciated/project-groups/delete", - "api-reference/endpoints/depreciated/project-groups/get-by-id", - "api-reference/endpoints/depreciated/project-groups/list", - "api-reference/endpoints/depreciated/project-groups/update" - ] - }, - { - "group": "Project Identities", - "pages": [ - "api-reference/endpoints/depreciated/project-identities/add-identity-membership", - "api-reference/endpoints/depreciated/project-identities/list-identity-memberships", - "api-reference/endpoints/depreciated/project-identities/get-by-id", - "api-reference/endpoints/depreciated/project-identities/update-identity-membership", - "api-reference/endpoints/depreciated/project-identities/delete-identity-membership" - ] - }, - { - "group": "Project Roles", - "pages": [ - "api-reference/endpoints/depreciated/project-roles/create", - "api-reference/endpoints/depreciated/project-roles/update", - "api-reference/endpoints/depreciated/project-roles/delete", - "api-reference/endpoints/depreciated/project-roles/get-by-slug", - "api-reference/endpoints/depreciated/project-roles/list" - ] - }, - { - "group": "Environments", - "pages": [ - "api-reference/endpoints/depreciated/environments/create", - "api-reference/endpoints/depreciated/environments/update", - "api-reference/endpoints/depreciated/environments/delete" - ] - }, - { - "group": "Folders", - "pages": [ - "api-reference/endpoints/depreciated/folders/list", - "api-reference/endpoints/depreciated/folders/get-by-id", - "api-reference/endpoints/depreciated/folders/create", - "api-reference/endpoints/depreciated/folders/update", - "api-reference/endpoints/depreciated/folders/delete" - ] - }, - { - "group": "Secret Tags", - "pages": [ - "api-reference/endpoints/depreciated/secret-tags/list", - "api-reference/endpoints/depreciated/secret-tags/get-by-id", - "api-reference/endpoints/depreciated/secret-tags/get-by-slug", - "api-reference/endpoints/depreciated/secret-tags/create", - "api-reference/endpoints/depreciated/secret-tags/update", - "api-reference/endpoints/depreciated/secret-tags/delete" - ] - }, - { - "group": "Secrets", - "pages": [ - "api-reference/endpoints/depreciated/secrets/list", - "api-reference/endpoints/depreciated/secrets/create", - "api-reference/endpoints/depreciated/secrets/read", - "api-reference/endpoints/depreciated/secrets/update", - "api-reference/endpoints/depreciated/secrets/delete", - "api-reference/endpoints/depreciated/secrets/create-many", - "api-reference/endpoints/depreciated/secrets/update-many", - "api-reference/endpoints/depreciated/secrets/delete-many", - "api-reference/endpoints/depreciated/secrets/attach-tags", - "api-reference/endpoints/depreciated/secrets/detach-tags" - ] - }, - { - "group": "Secret Imports", - "pages": [ - "api-reference/endpoints/depreciated/secret-imports/list", - "api-reference/endpoints/depreciated/secret-imports/create", - "api-reference/endpoints/depreciated/secret-imports/update", - "api-reference/endpoints/depreciated/secret-imports/delete" - ] - } - ] } ] }, diff --git a/frontend/src/context/OrgPermissionContext/types.ts b/frontend/src/context/OrgPermissionContext/types.ts index 4a569be06b..b63705fd1f 100644 --- a/frontend/src/context/OrgPermissionContext/types.ts +++ b/frontend/src/context/OrgPermissionContext/types.ts @@ -32,6 +32,7 @@ export enum OrgPermissionMachineIdentityAuthTemplateActions { export enum OrgPermissionSubjects { Workspace = "workspace", + Project = "project", Role = "role", Member = "member", Settings = "settings", @@ -109,6 +110,7 @@ export type AppConnectionSubjectFields = { export type OrgPermissionSet = | [OrgPermissionActions.Create, OrgPermissionSubjects.Workspace] + | [OrgPermissionActions.Create, OrgPermissionSubjects.Project] | [OrgPermissionActions.Read, OrgPermissionSubjects.Workspace] | [OrgPermissionActions, OrgPermissionSubjects.Role] | [OrgPermissionActions, OrgPermissionSubjects.Member] diff --git a/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx b/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx index 92f6348383..eb5b229389 100644 --- a/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx +++ b/frontend/src/layouts/ProjectLayout/components/ProjectSelect/ProjectSelect.tsx @@ -200,16 +200,20 @@ export const ProjectSelect = () => {
- {(isAllowed) => ( - } - onClick={() => - handlePopUpOpen(isAddingProjectsAllowed ? "addNewWs" : "upgradePlan") - } - > - New Project - + {(isOldProjectPermissionAllowed) => ( + + {(isAllowed) => ( + } + onClick={() => + handlePopUpOpen(isAddingProjectsAllowed ? "addNewWs" : "upgradePlan") + } + > + New Project + + )} + )} diff --git a/frontend/src/pages/organization/ProjectsPage/components/AllProjectView.tsx b/frontend/src/pages/organization/ProjectsPage/components/AllProjectView.tsx index 0897a2efd5..a1b74656f4 100644 --- a/frontend/src/pages/organization/ProjectsPage/components/AllProjectView.tsx +++ b/frontend/src/pages/organization/ProjectsPage/components/AllProjectView.tsx @@ -278,22 +278,26 @@ export const AllProjectView = ({
- {(isAllowed) => ( - + {(isOldProjectPermissionAllowed) => ( + + {(isAllowed) => ( + + )} + )} diff --git a/frontend/src/pages/organization/ProjectsPage/components/MyProjectView.tsx b/frontend/src/pages/organization/ProjectsPage/components/MyProjectView.tsx index 1a193f9bda..46f520d411 100644 --- a/frontend/src/pages/organization/ProjectsPage/components/MyProjectView.tsx +++ b/frontend/src/pages/organization/ProjectsPage/components/MyProjectView.tsx @@ -480,22 +480,26 @@ export const MyProjectView = ({ - {(isAllowed) => ( - + {(isOldProjectV1Allowed) => ( + + {(isAllowed) => ( + + )} + )} diff --git a/frontend/src/pages/organization/RoleByIDPage/components/OrgRoleModifySection.utils.ts b/frontend/src/pages/organization/RoleByIDPage/components/OrgRoleModifySection.utils.ts index 03b86f2abd..9c374d3980 100644 --- a/frontend/src/pages/organization/RoleByIDPage/components/OrgRoleModifySection.utils.ts +++ b/frontend/src/pages/organization/RoleByIDPage/components/OrgRoleModifySection.utils.ts @@ -122,12 +122,11 @@ export const formSchema = z.object({ .refine((val) => val !== "custom", { message: "Cannot use custom as its a keyword" }), permissions: z .object({ - workspace: z + project: z .object({ create: z.boolean().optional() }) .optional(), - "audit-logs": auditLogsPermissionSchema, member: generalPermissionSchema, groups: groupPermissionSchema, @@ -162,7 +161,11 @@ export const rolePermission2Form = (permissions: TPermission[] = []) => { // i would have to write a if loop with both conditions same const formVal: Record = {}; permissions.forEach((permission) => { - const { subject, action } = permission; + const { action } = permission; + let { subject } = permission; + if (subject === OrgPermissionSubjects.Workspace) { + subject = OrgPermissionSubjects.Project; + } if (!formVal?.[subject]) formVal[subject] = {}; formVal[subject][action] = true; }); diff --git a/frontend/src/pages/organization/RoleByIDPage/components/RolePermissionsSection/OrgRoleWorkspaceRow.tsx b/frontend/src/pages/organization/RoleByIDPage/components/RolePermissionsSection/OrgRoleWorkspaceRow.tsx index 2746e10bc6..5f9041a299 100644 --- a/frontend/src/pages/organization/RoleByIDPage/components/RolePermissionsSection/OrgRoleWorkspaceRow.tsx +++ b/frontend/src/pages/organization/RoleByIDPage/components/RolePermissionsSection/OrgRoleWorkspaceRow.tsx @@ -28,7 +28,7 @@ export const OrgRoleWorkspaceRow = ({ isEditable, control, setValue }: Props) => const rule = useWatch({ control, - name: "permissions.workspace" + name: "permissions.project" }); const selectedPermissionCategory = useMemo(() => { @@ -60,7 +60,7 @@ export const OrgRoleWorkspaceRow = ({ isEditable, control, setValue }: Props) => setIsCustom.off(); if (val === Permission.NoAccess) { - setValue("permissions.workspace", { create: false }, { shouldDirty: true }); + setValue("permissions.project", { create: false }, { shouldDirty: true }); } }; @@ -95,8 +95,8 @@ export const OrgRoleWorkspaceRow = ({ isEditable, control, setValue }: Props) => {PERMISSION_ACTIONS.map(({ action, label }) => { return ( ( { const { popUp, handlePopUpOpen, handlePopUpToggle } = usePopUp(["selectImportPlatform"] as const); return ( - -
-
-
-

Import from external source

+
+
+
+

Import from external source

- + - -
-

Import data from another platform to Infisical.

- handlePopUpToggle("selectImportPlatform", state)} - /> +
- +

Import data from another platform to Infisical.

+ + handlePopUpToggle("selectImportPlatform", state)} + /> +
); };