Merge pull request #4701 from Infisical/feat/sub-org

feat: sub organization
This commit is contained in:
Scott Wilson
2025-10-21 14:18:48 -07:00
committed by GitHub
200 changed files with 5621 additions and 2275 deletions
@@ -62,7 +62,8 @@ export enum OrgPermissionSubjects {
SecretShare = "secret-share",
GithubOrgSync = "github-org-sync",
GithubOrgSyncManual = "github-org-sync-manual",
MachineIdentityAuthTemplate = "machine-identity-auth-template"
MachineIdentityAuthTemplate = "machine-identity-auth-template",
SubOrganization = "sub-organization"
}
export enum OrgPermissionAdminConsoleAction {
@@ -112,6 +113,11 @@ export enum OrgPermissionGroupActions {
RemoveMembers = "remove-members"
}
export enum OrgPermissionSubOrgActions {
Create = "create",
DirectAccess = "direct-access"
}
export type AppConnectionSubjectFields = {
connectionId: string;
};
@@ -151,6 +157,7 @@ export type OrgPermissionSet =
| OrgPermissionSubjects.AppConnections
| (ForcedSubject<OrgPermissionSubjects.AppConnections> & AppConnectionSubjectFields)
)
];
]
| [OrgPermissionSubOrgActions, OrgPermissionSubjects.SubOrganization];
export type TOrgPermission = MongoAbility<OrgPermissionSet>;
@@ -1,5 +1,6 @@
import { useMemo } from "react";
import { useSuspenseQuery } from "@tanstack/react-query";
import { useRouteContext } from "@tanstack/react-router";
import { useRouteContext, useSearch } from "@tanstack/react-router";
import { fetchOrganizationById, organizationKeys } from "@app/hooks/api/organization/queries";
@@ -9,11 +10,29 @@ export const useOrganization = () => {
select: (el) => el.organizationId
});
const subOrganization = useSearch({
strict: false,
select: (el) => el?.subOrganization
});
const { data: currentOrg } = useSuspenseQuery({
queryKey: organizationKeys.getOrgById(organizationId),
queryKey: organizationKeys.getOrgById(organizationId, subOrganization || "root"),
queryFn: () => fetchOrganizationById(organizationId),
staleTime: Infinity
});
return { currentOrg };
const org = useMemo(
() => ({
currentOrg: {
...currentOrg,
id: currentOrg?.subOrganization?.id || currentOrg?.id,
parentOrgId: currentOrg.id
},
isSubOrganization: Boolean(currentOrg.subOrganization),
isRootOrganization: !currentOrg.subOrganization
}),
[currentOrg, subOrganization]
);
return org;
};