šŸ“ Sign Up | šŸ” Log In

← Root | ↑ Up

ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │ šŸ“„ shadcn/directory/clerk/clerk-docs/_partials/billing/checking-permission-using-has-function │ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜

╔══════════════════════════════════════════════════════════════════════════════════════════════╗
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
<If sdk="astro"> ```tsx {{ filename: 'src/components/manage-premium-content.tsx' }} import { useAuth } from '@clerk/astro/react'

export function ManagePremiumContent() { const { isLoaded, has } = useAuth()

if (!isLoaded) return <div>Loading...</div>

const hasPremiumAccessManage = has({ permission: 'org:premium_access:manage' })

if (!hasPremiumAccessManage)
  return (
    <h1>Only subscribers with the Premium Access Manage permission can access this content.</h1>
  )

return <h1>Our Exclusive Content</h1>

}


```astro {{ filename: 'src/pages/manage-premium-content.astro' }}
---
import { ManagePremiumContent } from '../components/manage-premium-content'
---

<!doctype html>
<html>
  <body>
    <ManagePremiumContent client:load />
  </body>
</html>
</If> <If sdk="js-frontend"> ```js {{ filename: 'main.js' }} import { Clerk } from '@clerk/clerk-js'

const clerkPubKey = import.meta.env.VITE_CLERK_PUBLISHABLE_KEY

const clerk = new Clerk(clerkPubKey) await clerk.load()

document.getElementById('app').innerHTML = <div id="manage-premium-content"></div>

const managePremiumContentDiv = document.getElementById('manage-premium-content')

const hasPremiumAccessManage = clerk.session.checkAuthorization({ permission: 'org:premium_access:manage', })

if (!hasPremiumAccessManage) { managePremiumContentDiv.innerHTML = <h1>Only subscribers with the Premium Access Manage permission can access this content.</h1> } else { managePremiumContentDiv.innerHTML = <h1>Our Exclusive Content</h1> }

</If>

<If sdk="nextjs">
```tsx {{ filename: 'app/manage-premium-content/page.tsx' }}
import { auth } from '@clerk/nextjs/server'

export default async function ManagePremiumContentPage() {
  const { has } = await auth()

  const hasPremiumAccessManage = has({ permission: 'org:premium_access:manage' })

  if (!hasPremiumAccessManage)
    return (
      <h1>Only subscribers with the Premium Access Manage permission can access this content.</h1>
    )

  return <h1>Our Exclusive Content</h1>
}
</If> <If sdk="nuxt"> ```vue {{ filename: 'pages/manage-premium-content.vue' }} <script setup lang="ts"> import { computed } from 'vue' import { useAuth } from '@clerk/nuxt/composables'

const { isLoaded, has } = useAuth() const hasPremiumAccessManage = computed(() => has.value?.({ permission: 'org:premium_access:manage' }), ) </script>

<template> <main> <div v-if="!isLoaded">Loading...</div> <h1 v-else-if="!hasPremiumAccessManage"> Only subscribers with the Premium Access Manage permission can access this content. </h1> <h1 v-else>Our Exclusive Content</h1> </main> </template> ``` </If> <If sdk="vue"> ```vue {{ filename: 'src/manage-premium-content.vue' }} <script setup lang="ts"> import { useAuth } from '@clerk/vue' import { computed } from 'vue'

const { isLoaded, has } = useAuth() const hasPremiumAccessManage = computed(() => has.value?.({ permission: 'org:premium_access:manage' }), ) </script>

<template> <main> <div v-if="!isLoaded">Loading...</div> <h1 v-else-if="!hasPremiumAccessManage"> Only subscribers with the Premium Access Manage permission can access this content. </h1> <h1 v-else>Our Exclusive Content</h1> </main> </template> ``` </If> <If sdk="react"> ```tsx {{ filename: 'src/pages/manage-premium-content.tsx' }} import { useAuth } from '@clerk/clerk-react'

export default function ManagePremiumContentPage() { const { has, isLoaded } = useAuth()

if (!isLoaded) return <div>Loading...</div>

const hasPremiumAccessManage = has({ permission: 'org:premium_access:manage' })

if (!hasPremiumAccessManage)
  return (
    <h1>Only subscribers with the Premium Access Manage permission can access this content.</h1>
  )

return <h1>Our Exclusive Content</h1>

}

</If>

<If sdk="react-router">
```tsx {{ filename: 'app/routes/manage-premium-content.tsx' }}
import type { Route } from './+types/manage-premium-content'
import { useAuth } from '@clerk/react-router'

export function meta({}: Route.MetaArgs) {
  return [{ title: 'Manage Premium Content' }]
}

export default function ManagePremiumContentPage() {
  const { has, isLoaded } = useAuth()

  if (!isLoaded) return <div>Loading...</div>

  const hasPremiumAccessManage = has({ permission: 'org:premium_access:manage' })

  if (!hasPremiumAccessManage)
    return (
      <h1>Only subscribers with the Premium Access Manage permission can access this content.</h1>
    )

  return <h1>Our Exclusive Content</h1>
}
</If> <If sdk="remix"> ```tsx {{ filename: 'app/routes/manage-premium-content.tsx' }} import { getAuth } from '@clerk/remix/ssr.server' import { useLoaderData } from '@remix-run/react' import type { LoaderFunctionArgs } from '@remix-run/node'

export const loader = async (args: LoaderFunctionArgs) => { const { has } = await getAuth(args) return { hasPremiumAccessManage: has({ permission: 'org:premium_access:manage' }) } }

export default function ManagePremiumContentPage() { const { hasPremiumAccessManage } = useLoaderData<typeof loader>()

if (!hasPremiumAccessManage)
  return (
    <h1>Only subscribers with the Premium Access Manage permission can access this content.</h1>
  )

return <h1>Our Exclusive Content</h1>

}

</If>

<If sdk="tanstack-react-start">
```tsx {{ filename: 'app/routes/manage-premium-content.tsx' }}
import { getAuth } from '@clerk/tanstack-react-start/server'
import { createFileRoute } from '@tanstack/react-router'
import { getWebRequest } from '@tanstack/react-start/server'

export const Route = createFileRoute('/manage-premium-content')({
  component: ManagePremiumContentPage,
  beforeLoad: async () => {
    const request = getWebRequest()
    if (!request) throw new Error('Request not found')
    return { auth: await getAuth(request) }
  },
  loader: async ({ context }) => {
    return {
      hasPremiumAccessManage: context.auth.has({ permission: 'org:premium_access:manage' }),
    }
  },
})

function ManagePremiumContentPage() {
  const { hasPremiumAccessManage } = Route.useLoaderData()

  if (!hasPremiumAccessManage)
    return (
      <h1>Only subscribers with the Premium Access Manage permission can access this content.</h1>
    )

  return <h1>Our Exclusive Content</h1>
}
</If> <If sdk="expo"> ```tsx {{ filename: 'app/(home)/manage-premium-content.tsx' }} import { useAuth } from '@clerk/clerk-expo' import { Text } from 'react-native'

export default function ManagePremiumContentPage() { const { isLoaded, has } = useAuth()

if (!isLoaded) return <div>Loading...</div>

const hasPremiumAccessManage = has({ permission: 'org:premium_access:manage' })

if (!hasPremiumAccessManage)
  return (
    <Text>
      Only subscribers with the Premium Access Manage permission can access this content.
    </Text>
  )

return <Text>Our Exclusive Content</Text>

}

</If>

<If sdk="expressjs">
```tsx {{ filename: 'src/routes/manage-premium-content.ts' }}
import { getAuth, requireAuth } from '@clerk/express'
import { Router } from 'express'

const router = Router()

router.get('/manage-premium-content', requireAuth(), async (req, res) => {
  const { has } = getAuth(req)

  const hasPremiumAccessManage = has({ permission: 'org:premium_access:manage' })

  if (hasPremiumAccessManage) {
    res.send('Our Exclusive Content')
  } else {
    res.send('Only subscribers with the Premium Access Manage permission can access this content.')
  }
})

export default router
</If> <If sdk="fastify"> ```tsx {{ filename: 'src/routes/manage-premium-content.ts' }} import type { FastifyInstance, FastifyReply, FastifyRequest } from 'fastify' import { getAuth } from '@clerk/fastify'

export const managePremiumContentRoutes = (fastify: FastifyInstance) => { fastify.get('/manage-premium-content', async (request: FastifyRequest, reply: FastifyReply) => { const { has } = getAuth(request)

  const hasPremiumAccessManage = has({ permission: 'org:premium_access:manage' })

  if (hasPremiumAccessManage) {
    reply.send('Our Exclusive Content')
  } else {
    reply.send(
      'Only subscribers with the Premium Access Manage permission can access this content.',
    )
  }
})

}

</If>

<If sdk="js-backend">
```ts {{ filename: 'src/routes/manage-premium-content.ts' }}
import { createClerkClient } from '@clerk/backend'

const clerkClient = createClerkClient({
  publishableKey: process.env.CLERK_PUBLISHABLE_KEY,
  secretKey: process.env.CLERK_SECRET_KEY,
})

const domain =
  process.env.NODE_ENV === 'production' ? 'https://example.com' : 'http://localhost:3000'

export async function GET(request: Request) {
  const authenticatedRequest = await clerkClient.authenticateRequest(request, {
    authorizedParties: [domain],
  })

  const user = authenticatedRequest.toAuth()

  if (user === null || user.userId === null) {
    return new Response('Unauthorized', { status: 401 })
  }

  const hasPremiumAccessManage = user.has({ permission: 'org:premium_access:manage' })

  if (!hasPremiumAccessManage) {
    return new Response(
      'Only subscribers with the Premium Access Manage permission can access this content.',
    )
  }

  return new Response('Our Exclusive Content')
}
</If>
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•‘
ā•šā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•ā•

← Root | ↑ Up