From 7626f0564b666ce25a3c3e1c5077db1b11f30b2b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Feb 2026 02:31:20 +0000 Subject: [PATCH 1/2] Initial plan From 0110c69a1657649342f221b50bdc981fdab38a6c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Feb 2026 02:40:05 +0000 Subject: [PATCH 2/2] docs: add Console auth evaluation plan and update roadmap with auth milestones MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Create CONSOLE_AUTH_PLAN.md: detailed evaluation of @objectstack/client + better-auth for building complete login-to-usage Console flow - Update ROADMAP.md: add Authentication & Console Gaps (P0) section, add Q1 §1.5 Console Authentication System (6 weeks, 3 phases), update Q2 §2.3 System Objects to reference Q1 auth work Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com> --- CONSOLE_AUTH_PLAN.md | 436 +++++++++++++++++++++++++++++++++++++++++++ ROADMAP.md | 53 +++++- 2 files changed, 484 insertions(+), 5 deletions(-) create mode 100644 CONSOLE_AUTH_PLAN.md diff --git a/CONSOLE_AUTH_PLAN.md b/CONSOLE_AUTH_PLAN.md new file mode 100644 index 000000000..b46f4fddd --- /dev/null +++ b/CONSOLE_AUTH_PLAN.md @@ -0,0 +1,436 @@ +# ObjectStack Console 全流程开发方案 + +## 基于 @objectstack/client + better-auth 的完整评估 + +> **编写日期:** 2026 年 2 月 10 日 +> **适用版本:** @objectstack/client ^2.0.1 · @objectstack/spec ^2.0.1 · ObjectUI v0.5.x +> **目标:** 评估并规划从登录到使用的 ObjectStack Console 完整开发方案 + +--- + +## 1. 现状扫描 + +### 1.1 已具备的能力 + +| 能力 | 包 / 文件 | 成熟度 | +|------|-----------|--------| +| **数据 CRUD** | `@object-ui/data-objectstack` (ObjectStackAdapter) | ✅ 生产就绪 | +| **元数据驱动 UI** | `@object-ui/react` (SchemaRendererProvider) | ✅ 生产就绪 | +| **列表 / 表格** | `@object-ui/plugin-grid`, `plugin-aggrid` | ✅ 生产就绪 | +| **表单系统** | `@object-ui/plugin-form` (6 种变体) | ✅ 生产就绪 | +| **仪表盘** | `@object-ui/plugin-dashboard` | ✅ 生产就绪 | +| **看板 / 日历 / 甘特** | `plugin-kanban`, `plugin-calendar`, `plugin-gantt` | ✅ 生产就绪 | +| **布局系统** | `@object-ui/layout` (AppShell, Sidebar, Header) | ✅ 生产就绪 | +| **权限系统** | `@object-ui/permissions` (RBAC, 字段/行级) | ✅ 生产就绪 | +| **多租户** | `@object-ui/tenant` (Provider, Guard, ScopedQuery) | ✅ 生产就绪 | +| **国际化** | `@object-ui/i18n` (10+ 语言, RTL) | ✅ 生产就绪 | +| **路由** | `react-router-dom` v7 (多应用路由) | ✅ 生产就绪 | +| **表达式引擎** | `@object-ui/core` (ExpressionEvaluator) | ✅ 生产就绪 | +| **主题系统** | Theme Provider (深色模式, CSS 变量) | ✅ 生产就绪 | +| **工作流** | `@object-ui/plugin-workflow` | ✅ 生产就绪 | +| **AI 集成** | `@object-ui/plugin-ai` | ✅ 生产就绪 | +| **报表导出** | `@object-ui/plugin-report` (PDF/Excel/CSV) | ✅ 生产就绪 | +| **命令面板** | `CommandPalette` 组件 | ✅ 生产就绪 | +| **连接状态监控** | `ConnectionStatus` 组件 | ✅ 生产就绪 | +| **错误边界** | `ErrorBoundary` 组件 | ✅ 生产就绪 | + +### 1.2 缺失能力(认证与会话相关) + +| 缺失能力 | 当前状态 | 优先级 | +|----------|---------|--------| +| **登录页面** | ❌ 无 — 硬编码用户 `{ name: 'John Doe', role: 'admin' }` | P0 | +| **会话管理** | ❌ 无 — 无 token 刷新/过期处理 | P0 | +| **认证上下文** | ❌ 无 — `ExpressionProvider` 接受手动传入的 user 对象 | P0 | +| **路由守卫** | ❌ 无 — 所有路由公开访问 | P0 | +| **注册流程** | ❌ 无 | P1 | +| **密码重置** | ❌ 无 | P1 | +| **用户资料页** | ❌ 无 | P1 | +| **OAuth 社交登录** | ❌ 无 | P2 | +| **组织管理** | ❌ 无 — 缺少 sys_user/sys_org/sys_role 系统对象 UI | P1 | +| **审计日志** | ❌ 无 — 缺少 sys_audit_log UI | P2 | +| **Token 注入到 DataSource** | ⚠️ 部分 — `ObjectStackAdapter` 构造器接受 `token` 参数但未动态更新 | P0 | + +--- + +## 2. 技术评估 + +### 2.1 @objectstack/client 评估 + +**版本:** ^2.0.1 + +**已验证能力:** + +```typescript +// 构造器 — 支持 token 和自定义 fetch +new ObjectStackClient({ + baseUrl: string; + token?: string; // ✅ Token 认证 + fetch?: (input, init) => Promise; // ✅ 自定义请求拦截 +}); + +// 数据 API +client.data.find(objectName, query) // ✅ 查询 +client.data.get(objectName, id) // ✅ 单条获取 +client.data.create(objectName, data) // ✅ 创建 +client.data.update(objectName, id, d) // ✅ 更新 +client.data.delete(objectName, id) // ✅ 删除 + +// 元数据 API +client.meta.getObject(objectName) // ✅ 获取对象定义 +client.meta.getItem(key) // ✅ 获取配置项 + +// 连接管理 +client.connect() // ✅ 建立连接 +``` + +**认证集成方式:** + +| 方式 | 说明 | 推荐度 | +|------|------|--------| +| `token` 参数 | 构造时传入静态 token | ⭐⭐ 适合服务端 | +| `fetch` 拦截 | 自定义 fetch 注入 Authorization header | ⭐⭐⭐⭐⭐ 推荐 — 支持动态 token | +| 手动 header | 每次请求手动附加 | ⭐ 不推荐 | + +**推荐认证集成策略:** 通过自定义 `fetch` 包装器,从 better-auth session 中动态获取 token 并注入到每个请求的 Authorization header 中。 + +```typescript +// 推荐模式 +const adapter = new ObjectStackAdapter({ + baseUrl: '/api/v1', + fetch: async (input, init) => { + const session = await authClient.getSession(); + const headers = new Headers(init?.headers); + if (session?.token) { + headers.set('Authorization', `Bearer ${session.token}`); + } + return fetch(input, { ...init, headers }); + }, +}); +``` + +**评估结论:** ✅ @objectstack/client **完全满足** Console 数据层需求。通过自定义 `fetch` 可无缝对接任何认证系统。 + +### 2.2 better-auth 评估 + +**better-auth** 是一个现代化的 TypeScript-first 认证框架,为全栈 JavaScript/TypeScript 应用提供开箱即用的认证解决方案。 + +**核心能力:** + +| 特性 | 支持情况 | Console 需要 | +|------|---------|-------------| +| 邮箱/密码登录 | ✅ 内置 | ✅ 必需 | +| OAuth/社交登录 | ✅ 插件 (GitHub, Google, etc.) | ✅ 推荐 | +| Session 管理 | ✅ 内置 (Cookie/JWT) | ✅ 必需 | +| Token 刷新 | ✅ 内置 | ✅ 必需 | +| 多租户 | ✅ 插件 (organization) | ✅ 必需 | +| RBAC | ✅ 插件 (access control) | ✅ 必需 | +| 双因子认证 | ✅ 插件 (two-factor) | ⬜ 可选 | +| 密码重置 | ✅ 内置 | ✅ 必需 | +| 邮箱验证 | ✅ 内置 | ✅ 推荐 | +| React 客户端 | ✅ `@better-auth/react` | ✅ 必需 | +| 数据库适配 | ✅ 多种 (Prisma, Drizzle, etc.) | ✅ 必需 | +| 自定义 API 路由 | ✅ 支持 | ✅ 必需 | + +**与 ObjectStack 生态集成优势:** + +1. **Session → Token 桥接**:better-auth session 可直接提供 JWT token 给 @objectstack/client +2. **Organization 插件** → 映射到 `@object-ui/tenant` 多租户体系 +3. **Access Control 插件** → 映射到 `@object-ui/permissions` RBAC 体系 +4. **React Hooks** → 与 ObjectUI React 组件模式一致 + +**评估结论:** ✅ better-auth **非常适合** 作为 Console 的认证层。它的 TypeScript-first 设计、插件体系和 React 集成与 ObjectUI 架构高度匹配。 + +--- + +## 3. 完整功能 Gap Analysis + +### 可开发性评估:从登录到使用的所有功能 + +``` +┌──────────────────────────────────────────────────────┐ +│ 登录 → 使用 全流程 │ +├──────────────────────────────────────────────────────┤ +│ │ +│ ┌─────────┐ ┌─────────┐ ┌─────────────────┐ │ +│ │ 登录 │──▷│ 会话 │──▷│ 数据层 Token 注入 │ │ +│ │ 页面 │ │ 建立 │ │ (fetch 拦截器) │ │ +│ └────┬────┘ └────┬────┘ └────────┬─────────┘ │ +│ │ │ │ │ +│ better-auth better-auth @objectstack/client │ +│ + React UI session fetch wrapper │ +│ │ │ │ │ +│ ▼ ▼ ▼ │ +│ ┌─────────┐ ┌─────────┐ ┌─────────────────┐ │ +│ │ 路由 │──▷│ 权限 │──▷│ 业务功能 │ │ +│ │ 守卫 │ │ 加载 │ │ (CRUD/Dashboard) │ │ +│ └────┬────┘ └────┬────┘ └────────┬─────────┘ │ +│ │ │ │ │ +│ AuthGuard permissions 现有 Console 组件 │ +│ 组件 + tenant │ │ +│ │ │ │ │ +│ ▼ ▼ ▼ │ +│ ✅ ✅ ✅ │ +│ 可实现 已有 已完成 │ +└──────────────────────────────────────────────────────┘ +``` + +### 功能完整性矩阵 + +| 功能模块 | 现有组件 | 需新增 | 技术方案 | 工作量 | +|---------|---------|--------|---------|--------| +| **登录页** | 无 | LoginPage 组件 | better-auth `signIn.email()` + Shadcn Form | 3 天 | +| **注册页** | 无 | RegisterPage 组件 | better-auth `signUp.email()` + Shadcn Form | 2 天 | +| **密码重置** | 无 | ForgotPassword 组件 | better-auth `forgetPassword()` | 2 天 | +| **Auth 上下文** | ExpressionProvider (手动) | AuthProvider 组件 | better-auth `useSession()` + React Context | 3 天 | +| **路由守卫** | 无 | AuthGuard 组件 | React Router loader + session 检查 | 2 天 | +| **Token 注入** | ObjectStackAdapter (静态) | 动态 fetch 拦截器 | 自定义 fetch 包装 better-auth session | 1 天 | +| **会话续期** | 无 | 自动续期逻辑 | better-auth 内置 session refresh | 1 天 | +| **用户资料页** | 无 | ProfilePage 组件 | better-auth `useSession()` + ObjectForm | 2 天 | +| **用户管理** | plugin-grid/form (通用) | sys_user 对象定义 | 现有 CRUD 组件 + sys_user schema | 3 天 | +| **组织管理** | tenant 包 (Provider/Guard) | sys_org UI + 组织切换器 | better-auth organization 插件 + tenant 包 | 3 天 | +| **角色管理** | permissions 包 (evaluator) | sys_role UI + 角色分配 | 现有 CRUD + permissions 评估器 | 3 天 | +| **审计日志** | 无 | sys_audit_log 查看器 | 现有 plugin-grid + 只读模式 | 2 天 | +| **RBAC 集成** | permissions 包 (完整) | 仅需连接真实数据 | PermissionProvider 注入真实角色 | 1 天 | +| **多租户集成** | tenant 包 (完整) | 仅需连接真实数据 | TenantProvider 注入真实租户 | 1 天 | + +**总计:约 29 个工作日(~6 周,1-2 人)** + +--- + +## 4. 架构方案 + +### 4.1 新增包:`@object-ui/auth` + +``` +packages/auth/ +├── src/ +│ ├── index.ts # 公开 API +│ ├── AuthProvider.tsx # 认证上下文 Provider +│ ├── useAuth.ts # 认证 Hook +│ ├── AuthGuard.tsx # 路由守卫组件 +│ ├── LoginForm.tsx # 登录表单 (Shadcn) +│ ├── RegisterForm.tsx # 注册表单 (Shadcn) +│ ├── ForgotPasswordForm.tsx # 密码重置表单 +│ ├── UserMenu.tsx # 用户下拉菜单 +│ ├── createAuthClient.ts # better-auth 客户端工厂 +│ └── types.ts # Auth 类型定义 +├── package.json +└── tsconfig.json +``` + +**核心 API 设计:** + +```typescript +// --- AuthProvider --- + + + + +// --- useAuth Hook --- +const { + user, // 当前用户 { id, name, email, role, image } + session, // 会话信息 { token, expiresAt } + isAuthenticated,// boolean + isLoading, // boolean + signIn, // (email, password) => Promise + signUp, // (name, email, password) => Promise + signOut, // () => Promise + updateUser, // (data) => Promise +} = useAuth(); + +// --- AuthGuard --- +} // 未认证时展示 + requiredRoles={['admin']} // 可选:角色要求 + requiredPermissions={['read']} // 可选:权限要求 +> + + + +// --- 与 ObjectStackAdapter 集成 --- +function createAuthenticatedAdapter(authClient) { + return new ObjectStackAdapter({ + baseUrl: '/api/v1', + fetch: async (input, init) => { + const session = await authClient.getSession(); + const headers = new Headers(init?.headers); + if (session?.token) { + headers.set('Authorization', `Bearer ${session.token}`); + } + return fetch(input, { ...init, headers }); + }, + }); +} +``` + +### 4.2 Console 改造方案 + +```diff + // apps/console/src/App.tsx + ++ import { AuthProvider, AuthGuard, useAuth } from '@object-ui/auth'; + import { ThemeProvider } from './components/theme-provider'; + + export function App() { + return ( + ++ + + ++ } /> ++ } /> ++ } /> + }> + ++ + } /> + } /> + + ++ + + ); + } + + // apps/console/src/App.tsx — AppContent 改造 + export function AppContent() { +- const expressionUser = { name: 'John Doe', email: 'admin@example.com', role: 'admin' }; ++ const { user, session } = useAuth(); ++ const expressionUser = { ++ name: user.name, ++ email: user.email, ++ role: user.role ++ }; + + // DataSource 现在带认证 ++ const adapter = createAuthenticatedAdapter(authClient); + + return ( +- ++ ++ ++ + ++ ++ + + ); + } +``` + +### 4.3 集成层次图 + +``` +┌─────────────────────────────────────────────────────────┐ +│ Console App │ +│ ┌──────────────────────────────────────────────────┐ │ +│ │ AuthProvider │ │ +│ │ ┌──────────────────────────────────────────┐ │ │ +│ │ │ PermissionProvider │ │ │ +│ │ │ ┌──────────────────────────────────┐ │ │ │ +│ │ │ │ TenantProvider │ │ │ │ +│ │ │ │ ┌──────────────────────────┐ │ │ │ │ +│ │ │ │ │ ExpressionProvider │ │ │ │ │ +│ │ │ │ │ ┌──────────────────┐ │ │ │ │ │ +│ │ │ │ │ │ SchemaRenderer │ │ │ │ │ │ +│ │ │ │ │ │ (ConsoleLayout) │ │ │ │ │ │ +│ │ │ │ │ └──────────────────┘ │ │ │ │ │ +│ │ │ │ └──────────────────────────┘ │ │ │ │ +│ │ │ └──────────────────────────────────┘ │ │ │ +│ │ └──────────────────────────────────────────┘ │ │ +│ └──────────────────────────────────────────────────┘ │ +│ │ │ +│ ▼ │ +│ ┌──────────────────────────────────────────────────┐ │ +│ │ ObjectStackAdapter (认证 fetch) │ │ +│ │ ↓ Bearer Token │ │ +│ │ @objectstack/client → ObjectStack Server │ │ +│ └──────────────────────────────────────────────────┘ │ +└─────────────────────────────────────────────────────────┘ +``` + +--- + +## 5. 实施计划 + +### Phase 1:认证基础(Week 1-2) + +| 任务 | 描述 | 交付物 | +|------|------|--------| +| 1.1 创建 `@object-ui/auth` 包 | 包骨架、TypeScript 配置、依赖声明 | 包目录结构 | +| 1.2 集成 better-auth 客户端 | `createAuthClient()` 工厂函数 | `createAuthClient.ts` | +| 1.3 实现 AuthProvider | React Context + useSession 集成 | `AuthProvider.tsx` | +| 1.4 实现 useAuth Hook | 封装 better-auth React hooks | `useAuth.ts` | +| 1.5 实现 AuthGuard | 路由保护组件 + 重定向逻辑 | `AuthGuard.tsx` | +| 1.6 实现 LoginForm | Shadcn UI 登录表单 | `LoginForm.tsx` | +| 1.7 单元测试 | Auth 包核心逻辑测试 | `*.test.ts` | + +### Phase 2:Console 集成(Week 3-4) + +| 任务 | 描述 | 交付物 | +|------|------|--------| +| 2.1 Console 路由改造 | 添加 /login, /register 路由 + AuthGuard | `App.tsx` 更新 | +| 2.2 认证 DataSource | 自定义 fetch 注入 Bearer token | `dataSource.ts` 更新 | +| 2.3 用户上下文串联 | AuthProvider → ExpressionProvider → PermissionProvider | Provider 层级调整 | +| 2.4 用户菜单 | Header 右侧用户头像 + 下拉菜单 | `UserMenu.tsx` | +| 2.5 登录/注册页面 | 完整 UI 页面(使用 auth 包组件) | `LoginPage.tsx`, `RegisterPage.tsx` | +| 2.6 密码重置流程 | 忘记密码 → 发送邮件 → 重置 | `ForgotPasswordPage.tsx` | +| 2.7 集成测试 | 登录→CRUD→登出完整流程 | E2E 测试 | + +### Phase 3:系统管理(Week 5-6) + +| 任务 | 描述 | 交付物 | +|------|------|--------| +| 3.1 系统对象定义 | sys_user, sys_org, sys_role, sys_permission schema | `objectstack.config.ts` 更新 | +| 3.2 用户管理页 | 用户列表 + CRUD(复用 plugin-grid + plugin-form) | 用户管理 UI | +| 3.3 组织管理页 | 组织树 + 成员管理(复用 plugin-grid) | 组织管理 UI | +| 3.4 角色管理页 | 角色列表 + 权限分配矩阵 | 角色管理 UI | +| 3.5 用户资料页 | 个人信息编辑 + 头像上传 + 密码修改 | ProfilePage | +| 3.6 审计日志 | 操作日志查看(只读 grid) | 审计日志 UI | +| 3.7 OAuth 配置 | GitHub/Google 等第三方登录配置 | OAuth 配置页 | + +--- + +## 6. 技术风险与缓解 + +| 风险 | 概率 | 影响 | 缓解措施 | +|------|------|------|---------| +| better-auth API 不稳定 | 低 | 中 | 通过 `@object-ui/auth` 包抽象,解耦具体实现 | +| @objectstack/client token 注入兼容性 | 低 | 高 | 已验证 `fetch` 参数可用;增加 token 刷新失败的回退逻辑 | +| better-auth 与 ObjectStack 服务端集成 | 中 | 高 | better-auth 支持自定义数据库适配器,可对接 ObjectStack 用户表 | +| Session/Token 过期时数据请求失败 | 中 | 中 | AuthProvider 监听 401 响应,自动重定向到登录页 | +| 多租户会话隔离 | 低 | 高 | better-auth organization 插件 + @object-ui/tenant 双重隔离 | +| 包体积增加 | 低 | 低 | better-auth 客户端包体较小(~15KB gzip),可接受 | + +--- + +## 7. 结论 + +### 可行性判定:✅ 完全可行 + +**@objectstack/client** 已提供完整的数据操作能力和灵活的认证集成接口(`token` 参数 + 自定义 `fetch`)。现有 Console 应用拥有完备的 UI 组件库(35 个包,91+ 组件),已具备列表、表单、仪表盘、看板、报表等全部业务功能。 + +**better-auth** 作为现代 TypeScript 认证框架,提供了从邮箱登录到 OAuth、从会话管理到多租户的完整认证解决方案,其 React 集成和插件体系与 ObjectUI 架构高度匹配。 + +两者结合可完整覆盖 Console 从登录到使用的所有功能需求: + +``` +登录 → 会话建立 → Token 注入 → 权限加载 → 业务使用 → 登出 + ✅ ✅ ✅ ✅ ✅ ✅ +``` + +### 推荐行动 + +1. **立即启动** Phase 1(认证基础),预计 2 周可交付登录/注销核心流程 +2. **优先实现** 自定义 `fetch` 模式的 token 注入,确保与现有 ObjectStackAdapter 无缝集成 +3. **复用现有组件** — 系统管理页面可直接使用 plugin-grid + plugin-form,无需重新开发 CRUD UI +4. **抽象认证层** — 通过 `@object-ui/auth` 包抽象 better-auth,未来可替换为其他认证方案 + +--- + +*本文档将随开发进展持续更新。* diff --git a/ROADMAP.md b/ROADMAP.md index 31105b47c..22c4b2a24 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,6 +1,6 @@ # ObjectUI Development Roadmap -> **Last Updated:** February 9, 2026 +> **Last Updated:** February 10, 2026 > **Current Version:** v0.5.x > **Target Version:** v2.0.0 > **Spec Version:** @objectstack/spec v2.0.1 @@ -47,6 +47,12 @@ ObjectUI is a universal Server-Driven UI (SDUI) engine built on React + Tailwind - ⚠️ Internationalization: No built-in i18n support - ⚠️ Performance: Bundle size 200KB, LCP 1.2s (Target: 150KB, 600ms) +**Authentication & Console Gaps (P0):** +- 🔲 Authentication system (@object-ui/auth with better-auth) +- 🔲 Login / Register / Password Reset pages +- 🔲 Session management & token injection into @objectstack/client +- 🔲 Route guards (AuthGuard component) + **ObjectOS Integration Gaps (P1):** - ✅ Multi-tenant architecture support (@object-ui/tenant) - ✅ RBAC integration (object/field/row-level permissions) (@object-ui/permissions) @@ -106,8 +112,39 @@ ObjectUI is a universal Server-Driven UI (SDUI) engine built on React + Tailwind - Largest Contentful Paint: 1.2s → 600ms - Bundle Size: 200KB → 140KB (gzipped) +#### 1.5 Console Authentication System (6 weeks) +**Target:** Complete login-to-usage flow using @objectstack/client + better-auth + +> 📄 Detailed plan: [CONSOLE_AUTH_PLAN.md](./CONSOLE_AUTH_PLAN.md) + +**Phase 1 — Auth Foundation (Week 1-2):** +- [ ] Create `@object-ui/auth` package (AuthProvider, useAuth, AuthGuard) +- [ ] Integrate better-auth client (`createAuthClient`, session management) +- [ ] Implement LoginForm, RegisterForm, ForgotPasswordForm (Shadcn UI) +- [ ] Implement authenticated fetch wrapper for @objectstack/client token injection + +**Phase 2 — Console Integration (Week 3-4):** +- [ ] Add /login, /register, /forgot-password routes to Console +- [ ] Wrap app routes with AuthGuard (redirect unauthenticated users) +- [ ] Connect AuthProvider → ExpressionProvider → PermissionProvider chain +- [ ] Add UserMenu to AppHeader (profile, settings, sign out) +- [ ] Replace hardcoded user context with real auth session + +**Phase 3 — System Administration (Week 5-6):** +- [ ] Define system objects (sys_user, sys_org, sys_role, sys_permission, sys_audit_log) +- [ ] Build user management page (reuse plugin-grid + plugin-form) +- [ ] Build organization management page with member management +- [ ] Build role management page with permission assignment matrix +- [ ] Build user profile page (profile edit, password change) +- [ ] Build audit log viewer (read-only grid) + +**Deliverables:** +- @object-ui/auth package +- Console login / register / password reset pages +- System administration pages (users, orgs, roles, audit logs) + **Q1 Milestone:** -- **v0.6.0 Release (March 2026):** Infrastructure Complete +- **v0.6.0 Release (March 2026):** Infrastructure Complete + Auth Foundation --- @@ -137,9 +174,14 @@ ObjectUI is a universal Server-Driven UI (SDUI) engine built on React + Tailwind #### 2.3 System Objects Integration (2 weeks) -- [ ] sys_user, sys_organization, sys_role, sys_permission, sys_audit_log -- [ ] Pre-built UI components (user profile, org tree, role assignment) -- [ ] Admin console example +> ⬆️ Auth-related system objects (sys_user, sys_org, sys_role) are initiated in Q1 §1.5 Phase 3. +> Q2 focuses on completing advanced features and integration hardening. + +- [ ] Complete sys_permission advanced UI (conditional permissions, sharing rules) +- [ ] sys_audit_log advanced features (search, export, retention policies) +- [ ] Pre-built UI components (org tree visualization, role assignment matrix) +- [ ] Admin console polish and production readiness +- [ ] OAuth provider management UI (GitHub, Google, SAML SSO) #### 2.4 Enterprise-Grade Features (4 weeks) @@ -306,6 +348,7 @@ This roadmap consolidates information from: 3. **apps/console/DEVELOPMENT_PLAN.md** - Console development plan 4. **UPDATE_SUMMARY.md** - Recent updates summary 5. **.github/copilot-instructions.md** - Architectural guidelines +6. **CONSOLE_AUTH_PLAN.md** - Console authentication & full-flow development plan (@objectstack/client + better-auth) For detailed technical specifications, implementation patterns, and historical context, please refer to these source documents.