Merge pull request #4931 from Infisical/fix/minor-bugs-in-project-role-access-tree

fix: minor bugs in project role access tree
This commit is contained in:
Piyush Gupta
2025-11-25 03:44:19 +05:30
committed by GitHub
2 changed files with 48 additions and 15 deletions

View File

@@ -87,17 +87,24 @@ const shouldShowConditionalAccess = (
folderPath: string,
conditionalFields: string[]
): boolean => {
return actionRuleMap.some((rule) => {
// Find all rules that apply to this environment/path
const applicableRules = actionRuleMap.filter((rule) => {
const ruleConditions = rule[action]?.conditions;
if (!ruleConditions) return false;
// Check if any of the conditional fields are present
const hasConditionalField = conditionalFields.some((field) => ruleConditions[field]);
if (!hasConditionalField) return false;
// Check if base conditions (environment and secretPath) apply
return doBaseConditionsApply(ruleConditions, environment, folderPath);
});
// If no rules apply, don't show conditional
if (applicableRules.length === 0) return false;
// Check if ALL applicable rules have conditional fields and if at least one rule applies without conditional fields, show full access
const allRulesHaveConditionalFields = applicableRules.every((rule) => {
const ruleConditions = rule[action]?.conditions;
if (!ruleConditions) return false;
return conditionalFields.some((field) => ruleConditions[field]);
});
return allRulesHaveConditionalFields;
};
const determineAccessLevel = (

View File

@@ -10,6 +10,8 @@ import {
faArrowRight,
faArrowRightToBracket,
faArrowUp,
faCheck,
faCopy,
faFilter,
faFingerprint,
faFolder,
@@ -79,6 +81,7 @@ import {
usePopUp,
useResetPageHelper,
useResizableHeaderHeight,
useTimedReset,
useToggle
} from "@app/hooks";
import {
@@ -194,6 +197,15 @@ export const OverviewPage = () => {
}
};
const [copiedSlug, , setCopiedSlug] = useTimedReset<string>({
initialState: ""
});
const copyToClipboard = (value: string, slug: string) => {
navigator.clipboard.writeText(value);
setCopiedSlug(slug);
};
const [filter, setFilter] = useState<Filter>(DEFAULT_FILTER_STATE);
const [filterHistory, setFilterHistory] = useState<
Map<string, { filter: Filter; searchFilter: string }>
@@ -1324,19 +1336,33 @@ export const OverviewPage = () => {
>
<Tooltip
content={
collapseEnvironments ? (
<p className="whitespace-break-spaces">{name}</p>
) : (
""
)
<div className="flex flex-col gap-2">
{collapseEnvironments ? (
<p className="whitespace-break-spaces text-mineshaft-300">{name}</p>
) : (
""
)}
<div className="flex items-center gap-2">
<p className="text-xs text-mineshaft-300">{slug}</p>
<IconButton
variant="plain"
colorSchema="secondary"
ariaLabel="Copy environment slug"
onClick={() => copyToClipboard(slug, slug)}
>
<FontAwesomeIcon icon={copiedSlug === slug ? faCheck : faCopy} />
</IconButton>
</div>
</div>
}
side="bottom"
sideOffset={-1}
align="end"
sideOffset={5}
align="center"
className="max-w-xl text-xs normal-case"
rootProps={{
disableHoverableContent: true
disableHoverableContent: false
}}
key={`tooltip-${name}-${index + 1}`}
>
<div
className={twMerge(