feat(rbac): added org permission context for pulling permission from api

This commit is contained in:
Akhil Mohan
2023-09-08 21:21:43 +05:30
parent e342e88499
commit 34fb7be1c4
11 changed files with 166 additions and 18 deletions
+2 -2
View File
@@ -1,2 +1,2 @@
export { useCreateRole, useDeleteRole,useUpdateRole } from "./mutation";
export { useGetRoles } from "./queries";
export { useCreateRole, useDeleteRole, useUpdateRole } from "./mutation";
export { useGetRoles, useGetUserOrgPermissions } from "./queries";
+27 -2
View File
@@ -1,11 +1,16 @@
import { createMongoAbility, MongoAbility, RawRuleOf } from "@casl/ability";
import { PackRule, unpackRules } from "@casl/ability/extra";
import { useQuery } from "@tanstack/react-query";
import { apiRequest } from "@app/config/request";
import { OrgPermissionSet } from "@app/context/OrgPermissionContext/types";
import { TGetRolesDTO, TRole } from "./types";
import { TGetRolesDTO, TGetUserOrgPermissionsDTO, TRole } from "./types";
export const roleQueryKeys = {
getRoles: ({ orgId, workspaceId }: TGetRolesDTO) => ["roles", { orgId, workspaceId }] as const
getRoles: ({ orgId, workspaceId }: TGetRolesDTO) => ["roles", { orgId, workspaceId }] as const,
getUserOrgPermissions: ({ orgId }: TGetUserOrgPermissionsDTO) =>
["user-permissions", { orgId }] as const
};
const getRoles = async ({ orgId, workspaceId }: TGetRolesDTO) => {
@@ -25,3 +30,23 @@ export const useGetRoles = ({ orgId, workspaceId }: TGetRolesDTO) =>
queryFn: () => getRoles({ orgId, workspaceId }),
enabled: Boolean(orgId)
});
const getUserOrgPermissions = async ({ orgId }: TGetUserOrgPermissionsDTO) => {
const { data } = await apiRequest.get<{
data: { permissions: PackRule<RawRuleOf<MongoAbility<OrgPermissionSet>>>[] };
}>(`/api/v1/roles/${orgId}/permissions`, {});
return data.data.permissions;
};
export const useGetUserOrgPermissions = ({ orgId }: TGetUserOrgPermissionsDTO) =>
useQuery({
queryKey: roleQueryKeys.getUserOrgPermissions({ orgId }),
queryFn: () => getUserOrgPermissions({ orgId }),
enabled: Boolean(orgId),
select: (data) => {
const rule = unpackRules<RawRuleOf<MongoAbility<OrgPermissionSet>>>(data);
const ability = createMongoAbility<OrgPermissionSet>(rule);
return ability;
}
});
+4
View File
@@ -49,3 +49,7 @@ export type TDeleteRoleDTO = {
id: string;
workspaceId?: string;
};
export type TGetUserOrgPermissionsDTO = {
orgId: string;
};