mirror of
https://github.com/fosrl/pangolin.git
synced 2026-07-06 12:19:50 +00:00
Remove the admin from the picker
This commit is contained in:
@@ -23,7 +23,10 @@ import type { AxiosResponse } from "axios";
|
|||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import { createPolicySchema } from ".";
|
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 { UsersSelector } from "@app/components/users-selector";
|
||||||
import { SwitchInput } from "@app/components/SwitchInput";
|
import { SwitchInput } from "@app/components/SwitchInput";
|
||||||
import { Button } from "@app/components/ui/button";
|
import { Button } from "@app/components/ui/button";
|
||||||
@@ -59,6 +62,8 @@ type PolicyUsersRolesSectionProps = {
|
|||||||
resourceId?: number;
|
resourceId?: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type OverlaySelectedRole = SelectedRole & { isAdmin: boolean };
|
||||||
|
|
||||||
export function EditPolicyUsersRolesSectionForm({
|
export function EditPolicyUsersRolesSectionForm({
|
||||||
orgId,
|
orgId,
|
||||||
allIdps,
|
allIdps,
|
||||||
@@ -97,11 +102,12 @@ export function EditPolicyUsersRolesSectionForm({
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Policy entries mapped to selector format
|
// Policy entries mapped to selector format
|
||||||
const policyRoleItems = useMemo(
|
const policyRoleItems = useMemo<OverlaySelectedRole[]>(
|
||||||
() =>
|
() =>
|
||||||
policy.roles.map((r) => ({
|
policy.roles.map((r) => ({
|
||||||
id: r.roleId.toString(),
|
id: r.roleId.toString(),
|
||||||
text: r.name
|
text: r.name,
|
||||||
|
isAdmin: false
|
||||||
})),
|
})),
|
||||||
[policy.roles]
|
[policy.roles]
|
||||||
);
|
);
|
||||||
@@ -119,7 +125,8 @@ export function EditPolicyUsersRolesSectionForm({
|
|||||||
const initialResourceUserIdsRef = useRef<Set<string>>(new Set());
|
const initialResourceUserIdsRef = useRef<Set<string>>(new Set());
|
||||||
|
|
||||||
// Combined selected roles/users (policy + resource-specific)
|
// Combined selected roles/users (policy + resource-specific)
|
||||||
const [combinedRoles, setCombinedRoles] = useState(policyRoleItems);
|
const [combinedRoles, setCombinedRoles] =
|
||||||
|
useState<OverlaySelectedRole[]>(policyRoleItems);
|
||||||
const [combinedUsers, setCombinedUsers] = useState(policyUserItems);
|
const [combinedUsers, setCombinedUsers] = useState(policyUserItems);
|
||||||
const [resourceRolesInitialized, setResourceRolesInitialized] =
|
const [resourceRolesInitialized, setResourceRolesInitialized] =
|
||||||
useState(false);
|
useState(false);
|
||||||
@@ -132,12 +139,20 @@ export function EditPolicyUsersRolesSectionForm({
|
|||||||
|
|
||||||
const resourceSpecific = resourceRolesData
|
const resourceSpecific = resourceRolesData
|
||||||
.filter((r) => !policyRoleLockedIds.has(r.roleId.toString()))
|
.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(
|
initialResourceRoleIdsRef.current = new Set(
|
||||||
resourceSpecific.map((r) => r.id)
|
resourceSpecific.map((r) => r.id)
|
||||||
);
|
);
|
||||||
setCombinedRoles([...policyRoleItems, ...resourceSpecific]);
|
setCombinedRoles(
|
||||||
|
[...policyRoleItems, ...resourceSpecific].filter(
|
||||||
|
(role) => !role.isAdmin
|
||||||
|
)
|
||||||
|
);
|
||||||
setResourceRolesInitialized(true);
|
setResourceRolesInitialized(true);
|
||||||
}, [
|
}, [
|
||||||
isResourceOverlay,
|
isResourceOverlay,
|
||||||
@@ -362,12 +377,27 @@ export function EditPolicyUsersRolesSectionForm({
|
|||||||
{isResourceOverlay ? (
|
{isResourceOverlay ? (
|
||||||
<RolesSelector
|
<RolesSelector
|
||||||
orgId={orgId}
|
orgId={orgId}
|
||||||
selectedRoles={
|
selectedRoles={combinedRoles.filter(
|
||||||
combinedRoles
|
(role) => !role.isAdmin
|
||||||
}
|
)}
|
||||||
onSelectRoles={
|
onSelectRoles={(roles) => {
|
||||||
setCombinedRoles
|
setCombinedRoles(
|
||||||
}
|
roles
|
||||||
|
.map(
|
||||||
|
(role) => ({
|
||||||
|
...role,
|
||||||
|
isAdmin:
|
||||||
|
Boolean(
|
||||||
|
role.isAdmin
|
||||||
|
)
|
||||||
|
})
|
||||||
|
)
|
||||||
|
.filter(
|
||||||
|
(role) =>
|
||||||
|
!role.isAdmin
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}}
|
||||||
disabled={isLoading}
|
disabled={isLoading}
|
||||||
restrictAdminRole
|
restrictAdminRole
|
||||||
lockedIds={
|
lockedIds={
|
||||||
|
|||||||
Reference in New Issue
Block a user