Loading...
Loading...
Compare original and translation side by side
Prerequisite: Enable Organizations in Clerk Dashboard first.
前提条件:首先在Clerk控制台中启用Organizations功能。
import { auth } from '@clerk/nextjs/server'
const { orgId, orgSlug } = await auth()
console.log(`Current org: ${orgSlug}`)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>
}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>
}import { auth } from '@clerk/nextjs/server'
export default async function ProtectedPage() {
const { orgId, orgSlug } = await auth()
if (!orgId) {
return <div>未加入任何组织</div>
}
return <div>欢迎访问{orgSlug}</div>
}const { has } = await auth()
if (!has({ role: 'org:admin' })) {
return <div>Admin access required</div>
}const { has } = await auth()
if (!has({ role: 'org:admin' })) {
return <div>需要管理员权限</div>
}import { OrganizationSwitcher } from '@clerk/nextjs'
export default function Nav() {
return (
<header>
<h1>Dashboard</h1>
<OrganizationSwitcher />
</header>
)
}import { OrganizationSwitcher } from '@clerk/nextjs'
export default function Nav() {
return (
<header>
<h1>控制台</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>
}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()
// 验证用户是否属于当前组织
if (orgSlug !== params.slug) {
redirect('/dashboard')
}
// 检查是否为管理员
if (!has({ role: 'org:admin' })) {
redirect(`/orgs/${orgSlug}`)
}
return <div>{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 |
| 现象 | 原因 | 解决方案 |
|---|---|---|
| 未调用 | 使用 |
| 角色检查始终失败 | 未在调用 | 在 |
| 用户可访问其他组织 | 未检查orgSlug是否与URL匹配 | 验证 |
| 组织未出现在切换器中 | 未启用Organizations功能 | 在Clerk控制台→Organizations中启用 |
| 邀请功能无法使用 | 角色配置错误 | 确保成员拥有邀请权限对应的角色 |