fix(secrets-permissions): UI fix for users with edit permissions but not read secret value permission

This commit is contained in:
carlosmonastyrski
2025-04-23 21:09:19 -03:00
parent f145a00ef5
commit 56b3e7a76d
3 changed files with 105 additions and 15 deletions
@@ -94,6 +94,24 @@ export const SecretItem = memo(
const { currentWorkspace } = useWorkspace();
const { permission } = useProjectPermission();
const { isRotatedSecret } = secret;
const [isSecretBlurFocus, setIsSecretBlurFocus] = useToggle(false);
const canEditSecretValue = permission.can(
ProjectPermissionSecretActions.Edit,
subject(ProjectPermissionSub.Secrets, {
environment,
secretPath,
secretName: secret.key,
secretTags: ["*"]
})
);
const getDefaultValue = () => {
if (secret.secretValueHidden) {
return canEditSecretValue ? "<hidden-by-infisical>" : "";
}
return secret.valueOverride || secret.value || "";
};
const {
handleSubmit,
@@ -108,11 +126,11 @@ export const SecretItem = memo(
} = useForm<TFormSchema>({
defaultValues: {
...secret,
value: secret.secretValueHidden ? "" : secret.value
value: getDefaultValue()
},
values: {
...secret,
value: secret.secretValueHidden ? "" : secret.value
value: getDefaultValue()
},
resolver: zodResolver(formSchema)
});
@@ -154,6 +172,7 @@ export const SecretItem = memo(
secretTags: selectedTagSlugs
})
);
const { secretValueHidden } = secret;
const [isSecValueCopied, setIsSecValueCopied] = useToggle(false);
@@ -169,6 +188,12 @@ export const SecretItem = memo(
overrideAction === SecretActionType.Created || overrideAction === SecretActionType.Modified;
const hasTagsApplied = Boolean(fields.length);
const handleSecretBlurClick = () => {
if (canEditSecretValue) {
setIsSecretBlurFocus.toggle();
}
};
const handleOverrideClick = () => {
if (isOverriden) {
// override need not be flagged delete if it was never saved in server
@@ -301,8 +326,17 @@ export const SecretItem = memo(
/>
)}
/>
) : secretValueHidden ? (
<Blur tooltipText="You do not have permission to read the value of this secret." />
) : secretValueHidden && !isSecretBlurFocus ? (
// eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
<div
className="flex flex-grow"
onClick={handleSecretBlurClick}
onBlur={() => setIsSecretBlurFocus.off()}
>
<Blur
tooltipText={`You do not have permission to read the value of this secret.${canEditSecretValue ? " But you have permission to edit it." : ""}`}
/>
</div>
) : (
<Controller
name="value"
@@ -316,7 +350,7 @@ export const SecretItem = memo(
environment={environment}
secretPath={secretPath}
{...field}
defaultValue={secretValueHidden ? "" : undefined}
defaultValue={secretValueHidden ? "<hidden-by-infisical>" : undefined}
containerClassName="py-1.5 rounded-md transition-all"
/>
)}