Skip to content

[P0] portal: no external-user portal mechanism — customers see the full admin Console chrome #1294

Description

@xuyushun441-sys

来源:docs/PLATFORM_GAPS_FROM_TEMPLATES.md 第 27 条(P0)。
实证发现自 helpdesk(最尖锐)、compliance(外审)、contracts(甲乙双方)、procurement(供应商 portal)。

现象

平台没有「外部用户门户」机制。当同一个 app 同时被员工和外部用户(客户 / 审计员 / 供应商 / 合作方)使用时:

  • 外部用户登录后看到的是和员工一样的 Console:同样的顶栏、同样的左侧导航、同样的应用网格、同样的搜索框。
  • 权限只能靠 profile 隐藏字段 / 视图 / 应用入口,但视觉层(chrome / navigation / 入口)无法换肤
  • 没法给客户做一个干净的「我的工单 + 提交工单 + 浏览知识库」自助页面。

helpdesk 模板的 customer_portal profile 是空壳——除了限制能看哪些字段,体验上和 admin 同屋。

复现

cd packages/helpdesk && pnpm dev
# 创建一个 profile=customer_portal 的账号登录
# 看到的还是 /_console/...,左侧有 Tickets / Messages / Customers / KB / Teams / SLA 全套导航
# 没有「外部用户专属布局」可选

当前 workaround

只能:

  1. 起一个第二份模板包(如 helpdesk-portal),独立部署、独立端口。
    • 代价:双倍部署、数据要么共享 DB 要么走 API 同步、SSO 状态分裂。
  2. 或者在 profile 里关掉绝大部分入口,让外部用户看到一片空白 + 一个对象——但仍然顶着 Console 的 ObjectStack chrome,UX 像「内部系统给你开了一道缝」。

两种都不达标 B2B/B2C SaaS 体验。

建议范围

M1:Portal 概念

  • 在 spec 引入 portal: { id, label, themeOverrides?, layoutKind: 'minimal' | 'embedded' | 'console' }
  • 同一份 app metadata 能挂多个 portal,每个 portal 有独立路由前缀(如 /portal/customer/...)。
  • 每个 portal 绑定一组 profiles。

M2:Portal-aware Layout

  • minimal 布局:去掉应用网格 / 跨应用导航 / 顶栏品牌部分可换肤。
  • 路由根据 portal id 切换:/portal/customer/helpdesk/... vs /_console/apps/helpdesk/...
  • 同一对象的同一视图能在两个 portal 用不同的 view 名称引用。

M3:Portal 默认页 + 公开入口

验收

  • helpdesk 模板新增 customer_portal portal,路由 /portal/helpdesk-customer/...,左导航只显示「我的工单 / 提交工单 / 知识库」三项
  • 同一登录态下可在 customer portal 与 console 之间用 URL 切换(不再共用 chrome)
  • compliance 模板新增 auditor_portal:外审人员只能看到只读证据
  • 缺陷库 gap chore(deps)(deps): bump zod from 3.25.76 to 4.3.5 #27 标记为已解决

关联

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingenhancementNew feature or requestpriority:p0Critical: blocker, must ship before MVP

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions