import { useForm } from "react-hook-form"; import { faSave } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { zodResolver } from "@hookform/resolvers/zod"; import { createNotification } from "@app/components/notifications"; import { Button, Table, TableContainer, TBody } from "@app/components/v2"; import { OrgPermissionSubjects, useOrganization } from "@app/context"; import { useGetOrgRole, useUpdateOrgRole } from "@app/hooks/api"; import { OrgPermissionAppConnectionRow } from "@app/pages/organization/RoleByIDPage/components/RolePermissionsSection/OrgPermissionAppConnectionRow"; import { formRolePermission2API, formSchema, rolePermission2Form, TFormSchema } from "../OrgRoleModifySection.utils"; import { OrgPermissionAdminConsoleRow } from "./OrgPermissionAdminConsoleRow"; import { OrgPermissionAuditLogsRow } from "./OrgPermissionAuditLogsRow"; import { OrgPermissionBillingRow } from "./OrgPermissionBillingRow"; import { OrgGatewayPermissionRow } from "./OrgPermissionGatewayRow"; import { OrgPermissionGroupRow } from "./OrgPermissionGroupRow"; import { OrgPermissionIdentityRow } from "./OrgPermissionIdentityRow"; import { OrgPermissionKmipRow } from "./OrgPermissionKmipRow"; import { OrgPermissionMachineIdentityAuthTemplateRow } from "./OrgPermissionMachineIdentityAuthTemplateRow"; import { OrgRelayPermissionRow } from "./OrgPermissionRelayRow"; import { OrgPermissionSecretShareRow } from "./OrgPermissionSecretShareRow"; import { OrgRoleWorkspaceRow } from "./OrgRoleWorkspaceRow"; import { RolePermissionRow } from "./RolePermissionRow"; const SIMPLE_PERMISSION_OPTIONS = [ { title: "User Management", formName: "member" }, { title: "Role Management", formName: "role" }, { title: "Incident Contacts", formName: "incident-contact" }, { title: "Organization Profile", formName: "settings" }, { title: "Secret Scanning", formName: "secret-scanning" }, { title: "SSO", formName: "sso" }, { title: "LDAP", formName: "ldap" }, { title: "SCIM", formName: "scim" }, { title: "GitHub Organization Sync", formName: OrgPermissionSubjects.GithubOrgSync }, { title: "External KMS", formName: OrgPermissionSubjects.Kms }, { title: "Project Templates", formName: OrgPermissionSubjects.ProjectTemplates } ] as const; type Props = { roleId: string; }; export const RolePermissionsSection = ({ roleId }: Props) => { const { currentOrg } = useOrganization(); const orgId = currentOrg?.id || ""; const { data: role } = useGetOrgRole(orgId, roleId); const { setValue, control, handleSubmit, formState: { isDirty, isSubmitting }, reset } = useForm({ defaultValues: role ? { ...role, permissions: rolePermission2Form(role.permissions) } : {}, resolver: zodResolver(formSchema) }); const { mutateAsync: updateRole } = useUpdateOrgRole(); const onSubmit = async (el: TFormSchema) => { try { await updateRole({ orgId, id: roleId, ...el, permissions: formRolePermission2API(el.permissions) }); createNotification({ type: "success", text: "Successfully updated role" }); } catch (err) { console.log(err); createNotification({ type: "error", text: "Failed to update role" }); } }; const isCustomRole = !["admin", "member", "no-access"].includes(role?.slug ?? ""); return (

Policies

Configure granular access policies

{isCustomRole && (
{isDirty && ( )}
)}
{SIMPLE_PERMISSION_OPTIONS.map((permission) => { return ( ); })}
); };