diff --git a/backend/src/ee/services/dynamic-secret/dynamic-secret-service.ts b/backend/src/ee/services/dynamic-secret/dynamic-secret-service.ts
index d207df4ce..99bf84aa3 100644
--- a/backend/src/ee/services/dynamic-secret/dynamic-secret-service.ts
+++ b/backend/src/ee/services/dynamic-secret/dynamic-secret-service.ts
@@ -228,7 +228,7 @@ export const dynamicSecretServiceFactory = ({
actorOrgId
);
ForbiddenError.from(permission).throwUnlessCan(
- ProjectPermissionDynamicSecretActions.Edit,
+ ProjectPermissionDynamicSecretActions.Delete,
subject(ProjectPermissionSub.DynamicSecrets, { environment: environmentSlug, secretPath: path })
);
@@ -284,6 +284,10 @@ export const dynamicSecretServiceFactory = ({
actorAuthMethod,
actorOrgId
);
+ ForbiddenError.from(permission).throwUnlessCan(
+ ProjectPermissionDynamicSecretActions.Read,
+ subject(ProjectPermissionSub.DynamicSecrets, { environment: environmentSlug, secretPath: path })
+ );
ForbiddenError.from(permission).throwUnlessCan(
ProjectPermissionDynamicSecretActions.Edit,
subject(ProjectPermissionSub.DynamicSecrets, { environment: environmentSlug, secretPath: path })
@@ -331,7 +335,7 @@ export const dynamicSecretServiceFactory = ({
// verify user has access to each env in request
environmentSlugs.forEach((environmentSlug) =>
ForbiddenError.from(permission).throwUnlessCan(
- ProjectPermissionDynamicSecretActions.Lease,
+ ProjectPermissionDynamicSecretActions.Read,
subject(ProjectPermissionSub.DynamicSecrets, { environment: environmentSlug, secretPath: path })
)
);
@@ -367,7 +371,7 @@ export const dynamicSecretServiceFactory = ({
actorOrgId
);
ForbiddenError.from(permission).throwUnlessCan(
- ProjectPermissionDynamicSecretActions.Lease,
+ ProjectPermissionDynamicSecretActions.Read,
subject(ProjectPermissionSub.DynamicSecrets, { environment: environmentSlug, secretPath: path })
);
@@ -413,7 +417,7 @@ export const dynamicSecretServiceFactory = ({
actorOrgId
);
ForbiddenError.from(permission).throwUnlessCan(
- ProjectPermissionDynamicSecretActions.Lease,
+ ProjectPermissionDynamicSecretActions.Read,
subject(ProjectPermissionSub.DynamicSecrets, { environment: environmentSlug, secretPath: path })
);
@@ -455,7 +459,7 @@ export const dynamicSecretServiceFactory = ({
// verify user has access to each env in request
environmentSlugs.forEach((environmentSlug) =>
ForbiddenError.from(permission).throwUnlessCan(
- ProjectPermissionDynamicSecretActions.Lease,
+ ProjectPermissionDynamicSecretActions.Read,
subject(ProjectPermissionSub.DynamicSecrets, { environment: environmentSlug, secretPath: path })
)
);
diff --git a/backend/src/ee/services/license/license-fns.ts b/backend/src/ee/services/license/license-fns.ts
index fa67b72d1..7a1632f93 100644
--- a/backend/src/ee/services/license/license-fns.ts
+++ b/backend/src/ee/services/license/license-fns.ts
@@ -21,7 +21,7 @@ export const getDefaultOnPremFeatures = (): TFeatureSet => ({
secretVersioning: true,
pitRecovery: false,
ipAllowlisting: false,
- rbac: false,
+ rbac: true,
customRateLimits: false,
customAlerts: false,
auditLogs: false,
diff --git a/frontend/src/components/permissions/GlobPermissionInfo.tsx b/frontend/src/components/permissions/GlobPermissionInfo.tsx
index 07ba42db3..b65b0c307 100644
--- a/frontend/src/components/permissions/GlobPermissionInfo.tsx
+++ b/frontend/src/components/permissions/GlobPermissionInfo.tsx
@@ -10,7 +10,7 @@ export const GlobPermissionInfo = () => {
return (
-
A glob pattern uses wildcards to match file names or paths.
+
A glob pattern uses wildcards to match resources or paths.
setPattern(e.target.value)} />
@@ -19,7 +19,7 @@ export const GlobPermissionInfo = () => {
;
export enum ProjectPermissionSub {
diff --git a/frontend/src/views/Project/RolePage/components/RolePermissionsSection/ProjectRoleModifySection.utils.ts b/frontend/src/views/Project/RolePage/components/RolePermissionsSection/ProjectRoleModifySection.utils.ts
index 7c145fd08..ec5f7b5a9 100644
--- a/frontend/src/views/Project/RolePage/components/RolePermissionsSection/ProjectRoleModifySection.utils.ts
+++ b/frontend/src/views/Project/RolePage/components/RolePermissionsSection/ProjectRoleModifySection.utils.ts
@@ -370,7 +370,6 @@ export const PROJECT_PERMISSION_OBJECT: TProjectPermissionObject = {
[ProjectPermissionSub.SecretFolders]: {
title: "Secret Folders",
actions: [
- { label: "Read", value: "read" },
{ label: "Create", value: "create" },
{ label: "Modify", value: "edit" },
{ label: "Remove", value: "delete" }
@@ -392,7 +391,7 @@ export const PROJECT_PERMISSION_OBJECT: TProjectPermissionObject = {
{ label: "Create", value: "create" },
{ label: "Modify", value: "edit" },
{ label: "Remove", value: "delete" },
- { label: "Lease", value: "lease" }
+ { label: "Manage Leases", value: "lease" }
]
},
[ProjectPermissionSub.Cmek]: {
diff --git a/frontend/src/views/Project/RolePage/components/RolePermissionsSection/components/GeneralPermissionConditions.tsx b/frontend/src/views/Project/RolePage/components/RolePermissionsSection/components/GeneralPermissionConditions.tsx
index 3d147c708..2ac518038 100644
--- a/frontend/src/views/Project/RolePage/components/RolePermissionsSection/components/GeneralPermissionConditions.tsx
+++ b/frontend/src/views/Project/RolePage/components/RolePermissionsSection/components/GeneralPermissionConditions.tsx
@@ -50,11 +50,12 @@ export const GeneralPermissionConditions = ({ position = 0, isDisabled, type }:
{items.fields.map((el, index) => {
- const condition = watch(`permissions.secrets.${position}.conditions.${index}`) as {
- lhs: string;
- rhs: string;
- operator: string;
- };
+ const condition =
+ (watch(`permissions.${type}.${position}.conditions.${index}`) as {
+ lhs: string;
+ rhs: string;
+ operator: string;
+ }) || {};
return (
(
diff --git a/frontend/src/views/Project/RolePage/components/RolePermissionsSection/components/SecretPermissionConditions.tsx b/frontend/src/views/Project/RolePage/components/RolePermissionsSection/components/SecretPermissionConditions.tsx
index b858545de..b742b829d 100644
--- a/frontend/src/views/Project/RolePage/components/RolePermissionsSection/components/SecretPermissionConditions.tsx
+++ b/frontend/src/views/Project/RolePage/components/RolePermissionsSection/components/SecretPermissionConditions.tsx
@@ -28,6 +28,7 @@ export const SecretPermissionConditions = ({ position = 0, isDisabled }: Props)
const {
control,
watch,
+ setValue,
formState: { errors }
} = useFormContext();
const items = useFieldArray({
@@ -66,7 +67,13 @@ export const SecretPermissionConditions = ({ position = 0, isDisabled }: Props)