mirror of
https://github.com/stefanpejcic/openpanel
synced 2025-06-26 18:28:26 +00:00
fork refine
This commit is contained in:
39
packages/core/src/hooks/accessControl/useCanWithoutCache.ts
Normal file
39
packages/core/src/hooks/accessControl/useCanWithoutCache.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
import React from "react";
|
||||
|
||||
import { AccessControlContext } from "@contexts/accessControl";
|
||||
import { sanitizeResource } from "@definitions/helpers/sanitize-resource";
|
||||
import { IAccessControlContext } from "../../interfaces";
|
||||
|
||||
export const useCanWithoutCache = (): IAccessControlContext => {
|
||||
const { can: canFromContext } = React.useContext(AccessControlContext);
|
||||
|
||||
const can = React.useMemo(() => {
|
||||
if (!canFromContext) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const canWithSanitizedResource: NonNullable<
|
||||
typeof canFromContext
|
||||
> = async ({ params, ...rest }) => {
|
||||
const sanitizedResource = params?.resource
|
||||
? sanitizeResource(params.resource)
|
||||
: undefined;
|
||||
|
||||
return canFromContext({
|
||||
...rest,
|
||||
...(params
|
||||
? {
|
||||
params: {
|
||||
...params,
|
||||
resource: sanitizedResource,
|
||||
},
|
||||
}
|
||||
: {}),
|
||||
});
|
||||
};
|
||||
|
||||
return canWithSanitizedResource;
|
||||
}, [canFromContext]);
|
||||
|
||||
return { can };
|
||||
};
|
||||
Reference in New Issue
Block a user