useCan
useCan uses the Access Control Provider's can function as the query function for TanStack Query's useQuery. It takes the parameters that can takes. It can also be configured with queryOptions for useQuery. Returns the result of useQuery.
Basic Usage
import { useCan } from "@pankod/refine-core";
const { data } = useCan({
resource: "resource-you-ask-for-access",
action: "action-type-on-resource",
params: { foo: "optional-params" },
});
Performance
As the number of points that checks for access control in your app increases the performance of your app may take a hit especially if its access control involves remote endpoints. Caching the access control checks helps a great deal. Since refine uses TanStack Query it can be easily done configuring staleTime and cacheTime properties.
import { useCan } from "@pankod/refine-core";
// inside your component
const { data } = useCan({
resource: "resource-you-ask-for-access",
action: "action-type-on-resource",
params: { foo: "optional-params" } },
queryOptions: {
staleTime: 5 * 60 * 1000, // 5 minutes
}
});
Properties
resource required
Passes to Access Control Provider's can function's resource parameter
useCan({
resource: "resource-you-ask-for-access",
});
action required
Passes to Access Control Provider's can function's action parameter
useCan({
action: "resource-you-ask-for-access",
});
params
Passes to Access Control Provider's can function's params parameter
useCan({
params: { foo: "optional-params" },
});
queryOptions
Query options for TanStack Query's useQuery.
useCan({
queryOptions: {
staleTime: 5 * 60 * 1000, // 5 minutes
},
});
Return values
Query result of TanStack Query's useQuery.
For example if you want to check if the user can create a post return value will be:
<Refine
accessControlProvider={{
can: async ({ resource, action }) => {
if (resource === "post" && action === "create") {
return Promise.resolve({
can: false,
reason: "Unauthorized",
});
}
return Promise.resolve({ can: true });
},
}}
// ...
/>;
// inside your component
const { data: canCreatePost } = useCan({
action: "create",
resource: "post",
});
console.log(canCreatePost); // { can: false, reason: "Unauthorized" }
API
Properties
Type Parameters
| Property | Desription |
|---|---|
| CanReturnType | Result data of the query HttpError |
Return values
| Description | Type |
|---|---|
Result of the TanStack Query's useQuery | QueryObserverResult<{ data: CanReturnType; }> |