globalbrain / sefirot

Global Brain Design System.
https://sefirot.globalbrains.com
MIT License
151 stars 12 forks source link

feat: add policy composable #491

Closed brc-dd closed 6 months ago

brc-dd commented 6 months ago

closes #419

Usage:

import {
  type Policy,
  type PolicyResponse,
  type PolicyHelpers as SefirotPolicyHelpers,
  usePolicy as sefirotUsePolicy
} from 'sefirot/composables/Policy'

interface PolicyHelpers<Code extends string | undefined = undefined>
  extends SefirotPolicyHelpers<Code> {
  user: { admin: boolean }
}

function usePolicy<Code extends string | undefined = undefined>(
  fn: (helpers: PolicyHelpers<Code>) => PolicyResponse<Code>
): Policy<Code> {
  const user = { admin: true }

  return sefirotUsePolicy((helpers) => {
    return fn({ ...helpers, user })
  })
}

// ...

import { type Policy, usePolicy } from './Policy'

function canDoFoo(): Policy<'foo' | 'bar'> {
  return usePolicy(({ user, allow, deny }) => {
    return user.admin ? allow('foo') : deny('bar')
  })
}

function canDoBar(): Policy {
  return usePolicy(({ user, allow, deny }) => {
    return user.admin ? allow() : deny()
  })
}

// alternatively

import { usePolicy } from './Policy'

export function canDoFoo() {
  return usePolicy<'foo' | 'bar'>(({ user, allow, deny }) => {
    return user.admin ? allow('foo') : deny('bar')
  })
}

export function canDoBar() {
  return usePolicy(({ user, allow, deny }) => {
    return user.admin ? allow() : deny()
  })
}
netlify[bot] commented 6 months ago

Deploy Preview for sefirot-story ready!

Name Link
Latest commit 4189e03641dab895596365cb77646a9701740b15
Latest deploy log https://app.netlify.com/sites/sefirot-story/deploys/65e94681614420000814eb04
Deploy Preview https://deploy-preview-491--sefirot-story.netlify.app
Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

netlify[bot] commented 6 months ago

Deploy Preview for sefirot-docs ready!

Name Link
Latest commit 4189e03641dab895596365cb77646a9701740b15
Latest deploy log https://app.netlify.com/sites/sefirot-docs/deploys/65e9468117dcdc000863bfdd
Deploy Preview https://deploy-preview-491--sefirot-docs.netlify.app
Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.