Entitlements Integration (React)
Harness the power of Frontegg's robust Entitlements Engine directly into the heart of your React application, allowing you to effortlessly implement sophisticated, role-based, and attribute-based access controls with just a few lines of code.
Prerequisite
Minimum required version : 6.0.25
Configuring Entitlements with React SDK
Use the following code to configure entitlements with React SDK:
import { FronteggProvider } from "@frontegg/react";
ReactDOM.render(
<FronteggProvider
contextOptions={contextOptions}
entitlementsOptions={{ enabled: true }}
>
{" "}
<Page />
</FronteggProvider>,
document.getElementById("root"),
);
API Calls
The following API calls can be performed after configuring Entitlements with React.
useFeatureEntitlements
- checks whether a user is entitled to feature access.usePermissionEntitlements
- checks whether a user is entitled to permission.useEntitlements
- checks whether a user is entitled to a feature or permission.
Custom Attributes
Frontegg allows you to create custom attributes for users (learn more about creating custom attributes. Attributes can be used for Feature Flagging purposes and in Entitlement API calls within a customAttributes object. The customAttributes object is optional and comprised of key-value pairs with possible values of string | number | boolean | Date
, like so:
useFeatureEntitlements('feature-x', { attr1: 'val1', attr2: 'val2' })
import { Entitlement, CustomAttributes } from '@frontegg/types';
useFeatureEntitlements(key: string, customAttributes?:CustomAttributes) => Entitlement
usePermissionEntitlements(key: string, customAttributes?:CustomAttributes) => Entitlement
useEntitlements(options: EntitledToOptions, customAttributes?:CustomAttributes) => Entitlement
Creating Hooks
Hooks Usage
- Hooks should be called for authenticated users only.
- An exception will be thrown if entitlements is not enabled before using hooks.
import {
useFeatureEntitlements,
usePermissionEntitlements,
useEntitlements,
useIsAuthenticated,
} from "@frontegg/react";
const Page = () => {
const isAuthenticated = useIsAuthenticated();
return <>{isAuthenticated && <Entitlements />}</>;
};
const Entitlements = () => {
const { isEntitled: isFEntitled, justification: fJust } =
useFeatureEntitlements("feature-key");
const { isEntitled: isPEntitled, justification: pJust } =
usePermissionEntitlements("permission-key");
const { isEntitled: isPEntitled2, justification: pJust2 } = useEntitlements({
permissionKey: "permission-key",
});
const { isEntitled: isFEntitled2, justification: fJust2 } = useEntitlements({
featureKey: "feature-key",
});
return (
<>
{isFEntitled && <div>A cool section</div>}
{isPEntitled && <div>An awesome section</div>}
{isPEntitled2 && <div>A mind-blowing section</div>}
{isFEntitled2 && <div>Another section</div>}
</>
);
};
In case the user is not entitled to the feature or permission, the NotEntitledJustification
when isEntitled
is false
will be one of the following enums:
export enum NotEntitledJustification {
MISSING_PERMISSION = 'MISSING_PERMISSION',
MISSING_FEATURE = 'MISSING_FEATURE',
BUNDLE_EXPIRED = 'BUNDLE_EXPIRED',
}
Load on demand
The user can load entitlements on demand with the loadEntitlements
saga:
const { loadEntitlements } = useAuthActions();
<button
onClick={() => {
loadEntitlements();
}}
>
Load entitlements
</button>;
You can pass a callback to let you know that the request was completed:
const { loadEntitlements } = useAuthActions();
const onLoadEntitlements = () => {
loadEntitlements({
callback: (isSucceeded) =>
console.log(`request ${isSucceeded ? "succeeded" : "failed"}`),
});
};
<button onClick={onLoadEntitlements}>Load entitlements</button>;
Updated 6 months ago