From 6b3a0a21139708fbf0f2ada95c35351bb0c04926 Mon Sep 17 00:00:00 2001 From: Owen Date: Mon, 1 Jun 2026 20:33:37 -0700 Subject: [PATCH] Remove the admin from the picker --- .../EditPolicyUserRolesSectionForm.tsx | 54 ++++++++++++++----- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/src/components/resource-policy/EditPolicyUserRolesSectionForm.tsx b/src/components/resource-policy/EditPolicyUserRolesSectionForm.tsx index d55a40a94..98897bfc3 100644 --- a/src/components/resource-policy/EditPolicyUserRolesSectionForm.tsx +++ b/src/components/resource-policy/EditPolicyUserRolesSectionForm.tsx @@ -23,7 +23,10 @@ import type { AxiosResponse } from "axios"; import { useRouter } from "next/navigation"; import { createPolicySchema } from "."; -import { RolesSelector } from "@app/components/roles-selector"; +import { + RolesSelector, + type SelectedRole +} from "@app/components/roles-selector"; import { UsersSelector } from "@app/components/users-selector"; import { SwitchInput } from "@app/components/SwitchInput"; import { Button } from "@app/components/ui/button"; @@ -59,6 +62,8 @@ type PolicyUsersRolesSectionProps = { resourceId?: number; }; +type OverlaySelectedRole = SelectedRole & { isAdmin: boolean }; + export function EditPolicyUsersRolesSectionForm({ orgId, allIdps, @@ -97,11 +102,12 @@ export function EditPolicyUsersRolesSectionForm({ ); // Policy entries mapped to selector format - const policyRoleItems = useMemo( + const policyRoleItems = useMemo( () => policy.roles.map((r) => ({ id: r.roleId.toString(), - text: r.name + text: r.name, + isAdmin: false })), [policy.roles] ); @@ -119,7 +125,8 @@ export function EditPolicyUsersRolesSectionForm({ const initialResourceUserIdsRef = useRef>(new Set()); // Combined selected roles/users (policy + resource-specific) - const [combinedRoles, setCombinedRoles] = useState(policyRoleItems); + const [combinedRoles, setCombinedRoles] = + useState(policyRoleItems); const [combinedUsers, setCombinedUsers] = useState(policyUserItems); const [resourceRolesInitialized, setResourceRolesInitialized] = useState(false); @@ -132,12 +139,20 @@ export function EditPolicyUsersRolesSectionForm({ const resourceSpecific = resourceRolesData .filter((r) => !policyRoleLockedIds.has(r.roleId.toString())) - .map((r) => ({ id: r.roleId.toString(), text: r.name })); + .map((r) => ({ + id: r.roleId.toString(), + text: r.name, + isAdmin: Boolean(r.isAdmin) + })); initialResourceRoleIdsRef.current = new Set( resourceSpecific.map((r) => r.id) ); - setCombinedRoles([...policyRoleItems, ...resourceSpecific]); + setCombinedRoles( + [...policyRoleItems, ...resourceSpecific].filter( + (role) => !role.isAdmin + ) + ); setResourceRolesInitialized(true); }, [ isResourceOverlay, @@ -362,12 +377,27 @@ export function EditPolicyUsersRolesSectionForm({ {isResourceOverlay ? ( !role.isAdmin + )} + onSelectRoles={(roles) => { + setCombinedRoles( + roles + .map( + (role) => ({ + ...role, + isAdmin: + Boolean( + role.isAdmin + ) + }) + ) + .filter( + (role) => + !role.isAdmin + ) + ); + }} disabled={isLoading} restrictAdminRole lockedIds={