2.4 KiB
2.4 KiB
member.ose.tw 前端架構(可直接開工版)
1. 前端責任邊界
- 站點:
member.ose.tw - 主要責任:
- 顯示目前登入使用者資訊
- 顯示目前使用者權限快照
- 透過管理 API 執行 grant/revoke
- 不處理:
- Authentik 管理 API 直連
- 密碼重設流程(導向 Authentik)
2. 建議技術堆疊
- Vue 3 + Vite + JavaScript
- Vue Router
- Pinia
- Axios
- Element Plus + Tailwind
3. 建議目錄結構
frontend/src/main.jsfrontend/src/router/index.jsfrontend/src/stores/auth.js:token、me、登入狀態permission.js:snapshot 與快取
frontend/src/api/http.js:axios instance + interceptorme.jspermission-admin.js
frontend/src/pages/profile/MePage.vuepermissions/PermissionSnapshotPage.vuepermissions/PermissionAdminPage.vue
frontend/src/types/api.js
4. 路由規劃(第一版)
/me- 顯示
GET /me資料
- 顯示
/me/permissions- 顯示
GET /me/permissions/snapshot
- 顯示
/admin/permissions- grant/revoke 表單與結果顯示
5. Token 與 Header 策略
- 使用者路由(
/me*)- 登入用
POST /auth/login(帳號密碼)取得 access token - header:
Authorization: Bearer <access_token>
- 登入用
- 管理路由(
/admin*)- headers:
X-Client-KeyX-API-Key
- headers:
- 建議:
- 使用 axios request interceptor 統一注入 header
- 401 時統一導向登入或刷新流程
6. 狀態管理最小模型
auth storeaccessToken: string | nullme: { sub, email, display_name } | null- actions:
setToken,fetchMe,logout
permission storesnapshot: { authentik_sub, permissions[] } | null- actions:
fetchMySnapshot,grantPermission,revokePermission
7. 錯誤處理規則
401- 使用者 token 過期或無效,導回登入
403- API client 白名單限制(origin/ip/path)
404- revoke 時 user 不存在
503- 後端必要設定缺失(例如 internal secret / authentik admin)
8. 開工順序(建議)
- 建立 axios client 與 interceptor
- 完成
/me與/me/permissions畫面 - 完成 grant/revoke 表單
- 補通知、loading、錯誤提示
詳細 request/response 契約請看 docs/FRONTEND_API_CONTRACT.md。
9. 本地開發環境
- Vite 會自動讀取
frontend/.env.development - 已預設:
VITE_API_BASE_URL=http://127.0.0.1:8000