仪表盘与管理后台

把模板中的仪表盘示例改造成真实连接的产品界面。

模板提供了完善的仪表盘外壳,以及若干 Example(示例)UI starter (UI 起点) 页面。外壳已连接认证,但大多数业务数据与写操作需要按你的产品实现。

仪表盘外壳

客户端布局 src/app/[locale]/(dashboard)/layout.tsx 组合了:

  • 可折叠的 shadcn 侧边栏,以及 src/config/user-sidebar-config.ts 路由配置。
  • 带侧栏开关、路径面包屑、语言切换和主题切换的吸顶头部。
  • DashboardSideUser:通过 useSession() 显示姓名、邮箱和头像,并调用 signOut()
  • 仪表盘、管理、账户、个人资料、安全与账单导航。

当前已连接的部分

界面/接口状态当前行为
仪表盘外壳/用户菜单Integrated(已集成)会话身份、退出和响应式外壳
/api/user/profileIntegrated(已集成)认证后查询/更新用户表,使用 Zod 校验
/api/user/subscriptionIntegrated(已集成)认证后读取订阅表
/api/user/settingsExample(示例)读取真实会话,但偏好与安全默认值是静态数据
/api/user/billingExample(示例)有认证,但订阅/账单/用量响应为静态数据
/api/admin/usersIntegrated(已集成)认证、管理员角色校验、筛选、分页与数据库查询
支付记录Integrated(已集成)Creem webhook 可写入订单/订阅表

每个用户 API 都会权威校验 Better Auth 会话。管理员 API 还要求 session.user.role === "admin",否则在查询用户前返回 401403

当前仍是示例 UI 的部分

页面/组件状态待完成工作
仪表盘卡片/图表/表格Example(示例)数据是 SectionCardsChartAreaInteractiveDataTable 内的常量
/admin/users 页面Example(示例)使用 mockUsers,操作不会调用真实管理员 API
/account/subscriptionExample(示例)显示 mockSubscription(还标成 Stripe),未读取 Creem 订阅表/API
/account/orderUI starter(UI 起点)静态空状态,未查询订单
/setting/billingUI starter(UI 起点)“Coming soon” 空状态
/setting/securityUI starter(UI 起点)“Coming soon” 空状态,无密码/2FA/会话操作
/setting/profileUI starter(UI 起点)读取 useSession,但 Save 与 Upload 没有处理函数

不要认为 /admin/users 页面已完成角色保护。src/proxy.ts/admin 只检查 Better Auth 会话 Cookie,不验证会话或角色。页面使用模拟数据, DashboardSideContent 当前也没有应用侧栏配置中的 roles 元数据。只有 /api/admin/users 执行了权威管理员校验。

proxy 检查只是提前改善导航体验,不是授权。Server Component 查询、Route Handler 与写操作都必须在数据边界进行保护。

连接真实数据

仪表盘指标

图表/表格可继续作为 Client Component,但应在父级 Server Component 中查询和聚合 数据,再把可序列化的普通数组作为 props 传入。移出组件里的 statschartDatainitialData 常量;互不依赖的数据库查询可用 Promise.all 并行执行。

管理员用户列表

/api/admin/users?page=...&search=... 的响应替换 mockUsers,或把相同查询 抽成仅服务端函数,由经过角色校验的 Server Component 使用。客户端请求仍需保留 API 的服务端角色校验。封禁/编辑操作应调用带认证和角色检查的写接口;当前下拉菜单 除复制邮箱外都只是视觉控件。

账户与设置

  • 订阅:读取 /api/user/subscription,用真实 Creem 产品/状态字段替换 mockSubscription
  • 订单:按已认证用户 ID 查询订单表,绝不能信任客户端提交的用户 ID。
  • 个人资料:Save 调用 PUT /api/user/profile;通过持久存储上传头像,再保存 URL。
  • 安全:如果启用相应能力,使用 Better Auth API 管理密码、会话和 2FA。
  • 账单:用提供商门户、发票、支付方式和真实用量模型替换静态 billing 响应。

实施清单

  • 定义产品真正需要的指标、表格、角色和账户操作。
  • 添加仅服务端查询,并限定到 session.user.id 或租户 ID。
  • 在每个受保护查询与写操作中校验完整服务端会话。
  • 除 API 外,也给管理员页面/布局添加权威管理员检查。
  • 为体验隐藏无权限导航(但不能把隐藏导航当作安全措施)。
  • 用数据库/API 数据替换常量与模拟记录。
  • 添加 Zod schema、写操作、加载/错误/空状态和 toast 反馈。
  • 大表格在服务端实现分页和筛选参数。
  • 为角色、封禁、账单与安全变更增加审计日志。
  • 测试未登录、普通用户、管理员、空数据和提供商失败场景。

相关页面

On this page