@can-it/react
is a React library designed to simplify the implementation of authorization in your application. The library provides a straightforward way to integrate complex authorization scenarios into your app within minutes using the CanItProvider
.
Simplified Authorization Implementation: CanItProvider
makes it easy to add authorization functionality to your React app.
Support for Nested Authorization Scenarios: The library accommodates nested authorization scenarios, making it ideal for applications with multiple authorization contexts.
To install @can-it/react
, you can use npm, yarn, or pnpm. Run one of the following commands in your project directory:
npm install @can-it/react
yarn add @can-it/react
pnpm add @can-it/react
Import the CanItProvider
into your React application’s component:
import { CanItProvider } from '@can-it/react';
export function HomeComponent() {
return (
<CanItProvider
comparators=
{/* You can pass it later by using the usePolicyStore hook */}
policy=>
<ProductComponent />
</CanItProvider>
);
}
CanItProvider
will use the compare action and RI in an exact way. If you want to compare it in another way, you can pass it via CanItProviderProps
comparators
. You can replace it with our other can-it-operators here.usePolicyStore
hook, which is mentioned below.Then:
Use the CanIt
component to choose to display allowed content or not.
// product-component.tsx
import { CanIt } from '@can-it/react';
export function ProductComponent() {
return (<CanIt allowTo={['view', 'products']} else="You cannot view the products">
You can view products { canEditProducts && 'and edit products also' }.
</CanIt>);
}
Use the useCanIt
hook to check whether a specific request can be performed directly in your component.
// product-component.tsx
import { useCanIt } from '@can-it/react';
export function ProductComponent() {
// using the hook to check whether a specific action can be performed
const canEditProducts = useCanIt('edit', 'products');
return canEditProducts ? <>You can edit products</> : <>You can not edit products</>
}
And you can use usePolicyStore
to update the policy in your component.
// product-component.tsx
import { usePolicyStore } from '@can-it/react';
export function ProductComponent() {
const { update, set } = usePolicyStore();
useEffect(() => {
set({ allow: [['view', 'products']] });
// update the policy state after 3 seconds
setTimeout(() => {
update(prePolicy => {
prePolicy.allow.push(['edit', 'products']);
return prePolicy;
});
}, 3000);
}, []);
// using the component
return <CanIt allowTo={['edit', 'products']} else="You cannot edit products">You can edit products</CanIt>;
}
You can also use usePolicyState
to retrieve the current policy.
// product-component.tsx
import { usePolicyState } from '@can-it/react';
export function ProductComponent() {
const { policy } = usePolicyState();
return (<CanIt allowTo={['view', 'products']} else="You cannot view the component">
You can view products with the current policy {JSON.stringify(policy, null, ' ')}
</CanIt>);
}