Refactor secret permission validation in InfisicalSecretInput and improve tooltip styling in CreateSecretForm components

This commit is contained in:
Victor Santos
2025-11-10 14:50:57 -03:00
parent 7c4e3bf698
commit 2083e9102f
4 changed files with 50 additions and 51 deletions

View File

@@ -389,30 +389,26 @@ export const InfisicalSecretInput = forwardRef<HTMLTextAreaElement, Props>(
const secretPath = segment === environmentSlug ? "/" : folderPath;
const canReadSecretValue = hasSecretReadValueOrDescribePermission(
permission,
ProjectPermissionSecretActions.ReadValue,
{
environment: environmentSlug,
secretPath,
secretName: secretName ?? "*",
secretTags: ["*"]
// Only validate secret permission, users can always view environments and folders
if (segment === secretName) {
const canReadSecretValue = hasSecretReadValueOrDescribePermission(
permission,
ProjectPermissionSecretActions.ReadValue,
{
environment: environmentSlug,
secretPath,
secretName: secretName ?? "*",
secretTags: ["*"]
}
);
if (!canReadSecretValue) {
createNotification({
text: "You do not have permission to access this secret",
type: "error"
});
return;
}
);
let resourceName = "secret";
if (segment === environmentSlug) {
resourceName = "environment";
} else if (segment !== secretName && folderPath.includes(segment)) {
resourceName = "folder";
}
if (!canReadSecretValue) {
createNotification({
text: `You do not have permission to access this ${resourceName}`,
type: "error"
});
return;
}
navigate({

View File

@@ -252,15 +252,15 @@ export const CreateSecretForm = ({ secretPath = "/", onClose }: Props) => {
tooltipText={
<div>
You can add references to other secrets using the format{" "}
<code>
<code className="rounded-sm bg-mineshaft-600 px-1 py-0.5">
&#36;{"{"}secret_name{"}"}
</code>
<br />
<br />
You can go to the referenced secret by holding the{" "}
<code className="rounded-sm bg-mineshaft-600 p-0.5">Cmd</code> (Mac) or{" "}
<code className="rounded-sm bg-mineshaft-600 p-0.5">Ctrl</code> (Windows/Linux) key
and clicking on the secret name.
<code className="rounded-sm bg-mineshaft-600 px-1 py-0.5">Cmd</code> (Mac) or{" "}
<code className="rounded-sm bg-mineshaft-600 px-1 py-0.5">Ctrl</code>{" "}
(Windows/Linux) key and clicking on the secret name.
</div>
}
tooltipClassName="max-w-md"

View File

@@ -219,17 +219,19 @@ const Page = () => {
ProjectPermissionSub.Commits
);
const defaultIncludeFilters = {
[RowType.Folder]: routerQueryParams.filterBy?.includes(RowType.Folder) || false,
[RowType.Import]: routerQueryParams.filterBy?.includes(RowType.Import) || false,
[RowType.DynamicSecret]: routerQueryParams.filterBy?.includes(RowType.DynamicSecret) || false,
[RowType.Secret]: routerQueryParams.filterBy?.includes(RowType.Secret) || false,
[RowType.SecretRotation]: routerQueryParams.filterBy?.includes(RowType.SecretRotation) || false
};
const defaultFilterState = {
tags: {},
searchFilter: (routerQueryParams.search as string) || "",
// these should always be on by default for the UI, they will be disabled for the query below based off permissions
include: {
[RowType.Folder]: false,
[RowType.Import]: false,
[RowType.DynamicSecret]: false,
[RowType.Secret]: false,
[RowType.SecretRotation]: false
}
include: defaultIncludeFilters
};
const [filter, setFilter] = useState<Filter>(defaultFilterState);
@@ -529,6 +531,19 @@ const Page = () => {
[navigate]
);
const handleClearFilters = useCallback(() => {
setFilter(defaultFilterState);
setDebouncedSearchFilter("");
navigate({
search: (prev) => ({
...prev,
search: "",
tags: "",
filterBy: ""
})
});
}, [navigate]);
const handleSearchChange = useCallback(
(searchFilter: string) => {
setFilter((state) => ({ ...state, searchFilter }));
@@ -882,19 +897,7 @@ const Page = () => {
isPITEnabled={isPITEnabled}
hasPathPolicies={hasPathPolicies}
onRequestAccess={(params) => handlePopUpOpen("requestAccess", params)}
onClearFilters={() =>
setFilter((prev) => ({
...prev,
tags: {},
include: {
secret: false,
import: false,
dynamic: false,
rotation: false,
folder: false
}
}))
}
onClearFilters={handleClearFilters}
/>
<div
ref={tableRef}

View File

@@ -200,15 +200,15 @@ export const CreateSecretForm = ({
tooltipText={
<div>
You can add references to other secrets using the format{" "}
<code>
<code className="rounded-sm bg-mineshaft-600 px-1 py-0.5">
&#36;{"{"}secret_name{"}"}
</code>
<br />
<br />
You can go to the referenced secret by holding the{" "}
<code className="rounded-sm bg-mineshaft-600 p-0.5">Cmd</code> (Mac) or{" "}
<code className="rounded-sm bg-mineshaft-600 p-0.5">Ctrl</code> (Windows/Linux) key
and clicking on the secret name.
<code className="rounded-sm bg-mineshaft-600 px-1 py-0.5">Cmd</code> (Mac) or{" "}
<code className="rounded-sm bg-mineshaft-600 px-1 py-0.5">Ctrl</code>{" "}
(Windows/Linux) key and clicking on the secret name.
</div>
}
tooltipClassName="max-w-md"