diff --git a/frontend/src/helpers/string.ts b/frontend/src/helpers/string.ts new file mode 100644 index 000000000..8f581a280 --- /dev/null +++ b/frontend/src/helpers/string.ts @@ -0,0 +1,5 @@ +export const removeTrailingSlash = (str: string) => { + if (str === "/") return str; + + return str.endsWith("/") ? str.slice(0, -1) : str; +}; diff --git a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/SpecificPrivilegeSection.tsx b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/SpecificPrivilegeSection.tsx index 6fb97063b..7894d0e78 100644 --- a/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/SpecificPrivilegeSection.tsx +++ b/frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/SpecificPrivilegeSection.tsx @@ -43,6 +43,7 @@ import { useProjectPermission, useWorkspace } from "@app/context"; +import { removeTrailingSlash } from "@app/helpers/string"; import { usePopUp } from "@app/hooks"; import { TProjectUserPrivilege, @@ -104,7 +105,9 @@ export const SpecificPrivilegeSecretForm = ({ ? { environmentSlug: privilege.permissions?.[0]?.conditions?.environment, // secret path will be inside $glob operator - secretPath: privilege.permissions?.[0]?.conditions?.secretPath?.$glob || "", + secretPath: privilege.permissions?.[0]?.conditions?.secretPath?.$glob + ? removeTrailingSlash(privilege.permissions?.[0]?.conditions?.secretPath?.$glob) + : "", read: privilege.permissions?.some(({ action }) => action.includes(ProjectPermissionActions.Read) ), @@ -183,7 +186,7 @@ export const SpecificPrivilegeSecretForm = ({ ]; const conditions: Record = { environment: data.environmentSlug }; if (data.secretPath) { - conditions.secretPath = { $glob: data.secretPath }; + conditions.secretPath = { $glob: removeTrailingSlash(data.secretPath) }; } await updateUserPrivilege.mutateAsync({ privilegeId: privilege.id,