Skip to content

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

@xuyushun441-sys

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 标记为已解决

关联

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingenhancementNew feature or requestgood first issueGood for newcomerspriority:p0Critical: blocker, must ship before MVP

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions