Skip to content

Instantly share code, notes, and snippets.

@aminpaks
Last active October 21, 2022 17:17
Show Gist options
  • Save aminpaks/c3f2cb31bcf696b1ceecd3b87f2945fb to your computer and use it in GitHub Desktop.
Save aminpaks/c3f2cb31bcf696b1ceecd3b87f2945fb to your computer and use it in GitHub Desktop.

React Auth API

Looking at these two examples which one is better in your opinion, and why?

Pure hook

import {usePolicy} from 'shared/authorization';
import {productPolicy} from 'products';

...
function Product() {
  const [{loading}, directives] = usePolicy(productPolicy);
  
  return (
    <Page>
      {directives.edit.allowed ? <ProductStatus /> : <ViewOnlyProductStatus />}
      ...
    </Page>
  );
}

Component:

import {PolicyAuth} from 'shared/authorization';
import {productPolicy} from 'products';

...
function Product() {
  return (
    <Page>
      <PolicyAuth
        policy={productPolicy}
        directive="edit"
        onEval={({allowed, message}) => allowed ? <ProductStatus /> : <ViewOnlyProductStatus />}
        onLoading={() => <Skeleton />}
      />
      ...
    </Page>
  );
}

Multiple policies using Hooks:

import {usePolicy} from 'shared/authorization';
import {productPolicy} from 'products';
import {collectionPolicy} from 'collections';

...
function Product() {
  const [{loading, error}, producutDirectives, collectionDirectives] = usePolicy(productPolicy, collectionPolicy);
  
  return (
    <Page>
      {producutDirectives.edit.allowed ? <ProductStatus /> : <ViewOnlyProductStatus />}
      ...
    </Page>
  );
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment