mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-18 22:29:15 +00:00
feat: battle of ts - unlimited edition
This commit is contained in:
@@ -10,6 +10,7 @@ import {
|
||||
} from "@app/hooks/api/roles/queries";
|
||||
|
||||
import { OrgPermissionSet } from "./types";
|
||||
import { useCallback } from "react";
|
||||
|
||||
export const useOrgPermission = () => {
|
||||
const organizationId = useRouteContext({
|
||||
@@ -17,16 +18,24 @@ export const useOrgPermission = () => {
|
||||
select: (el) => el.organizationId
|
||||
});
|
||||
|
||||
const { data } = useSuspenseQuery({
|
||||
const {
|
||||
data: { permission, memberships = [] }
|
||||
} = useSuspenseQuery({
|
||||
queryKey: roleQueryKeys.getUserOrgPermissions({ orgId: organizationId }),
|
||||
queryFn: () => fetchUserOrgPermissions({ orgId: organizationId }),
|
||||
select: (res) => {
|
||||
const rule = unpackRules<RawRuleOf<MongoAbility<OrgPermissionSet>>>(res.permissions);
|
||||
const ability = createMongoAbility<OrgPermissionSet>(rule, { conditionsMatcher });
|
||||
return { permission: ability, membership: res.membership };
|
||||
return { permission: ability, memberships: res.memberships };
|
||||
},
|
||||
staleTime: Infinity
|
||||
});
|
||||
|
||||
return data;
|
||||
const hasOrgRole = useCallback(
|
||||
(role: string) =>
|
||||
memberships?.some((membership) => membership.roles.some((el) => role === el.role)),
|
||||
[]
|
||||
);
|
||||
|
||||
return { permission, memberships, hasOrgRole };
|
||||
};
|
||||
|
||||
@@ -20,7 +20,7 @@ export const useProjectPermission = () => {
|
||||
}
|
||||
|
||||
const {
|
||||
data: { permission, membership, assumedPrivilegeDetails }
|
||||
data: { permission, memberships, assumedPrivilegeDetails }
|
||||
} = useSuspenseQuery({
|
||||
queryKey: roleQueryKeys.getUserProjectPermissions({ projectId }),
|
||||
queryFn: () => fetchUserProjectPermissions({ projectId }),
|
||||
@@ -31,18 +31,16 @@ export const useProjectPermission = () => {
|
||||
return {
|
||||
permission: ability,
|
||||
assumedPrivilegeDetails: data.assumedPrivilegeDetails,
|
||||
membership: {
|
||||
...data.membership,
|
||||
roles: data.membership.roles.map(({ role }) => role)
|
||||
}
|
||||
memberships: data.memberships
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
const hasProjectRole = useCallback(
|
||||
(role: string) => membership?.roles?.includes(role) || false,
|
||||
(role: string) =>
|
||||
memberships?.some((membership) => membership.roles.some((el) => role === el.role)),
|
||||
[]
|
||||
);
|
||||
|
||||
return { permission, membership, hasProjectRole, assumedPrivilegeDetails };
|
||||
return { permission, memberships, hasProjectRole, assumedPrivilegeDetails };
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user