Loading...
Loading...
Clerk Organizations for B2B SaaS - create multi-tenant apps with org switching, role-based access, verified domains, and enterprise SSO. Use for team workspaces, RBAC, org-based routing, member management.
npx skill4agent add clerk/skills clerk-orgsPrerequisite: Enable Organizations in Clerk Dashboard first.
import { auth } from '@clerk/nextjs/server'
const { orgId, orgSlug } = await auth()
console.log(`Current org: ${orgSlug}`)app/orgs/[slug]/page.tsx
app/orgs/[slug]/settings/page.tsxexport default function DashboardPage({ params }: { params: { slug: string } }) {
return <div>Organization: {params.slug}</div>
}import { auth } from '@clerk/nextjs/server'
export default async function ProtectedPage() {
const { orgId, orgSlug } = await auth()
if (!orgId) {
return <div>Not in an organization</div>
}
return <div>Welcome to {orgSlug}</div>
}const { has } = await auth()
if (!has({ role: 'org:admin' })) {
return <div>Admin access required</div>
}import { OrganizationSwitcher } from '@clerk/nextjs'
export default function Nav() {
return (
<header>
<h1>Dashboard</h1>
<OrganizationSwitcher />
</header>
)
}| Role | Permissions |
|---|---|
| Full access, manage members, settings |
| Limited access, read-only |
| Permission | Role |
|---|---|
| Can create new organizations |
| Can invite/remove members (default: admin) |
| Can change member roles (default: admin) |
| Can update org metadata (default: admin) |
import { auth } from '@clerk/nextjs/server'
import { redirect } from 'next/navigation'
export default async function AdminPage({ params }: { params: { slug: string } }) {
const { orgSlug, has } = await auth()
// Verify user is in the org
if (orgSlug !== params.slug) {
redirect('/dashboard')
}
// Check if admin
if (!has({ role: 'org:admin' })) {
redirect(`/orgs/${orgSlug}`)
}
return <div>Admin settings for {orgSlug}</div>
}| Symptom | Cause | Solution |
|---|---|---|
| Not calling | Use |
| Role check always fails | Not awaiting | Add |
| Users can access other orgs | Not checking orgSlug matches URL | Verify |
| Org not appearing in switcher | Organizations not enabled | Enable in Clerk Dashboard → Organizations |
| Invitations not working | Wrong role configuration | Ensure members have invite role permissions |