- Added subscription management for logged-in users, allowing them to view and unsubscribe from newsletters directly. - Introduced profile maintenance features, enabling users to update personal information and manage addresses. - Expanded API scopes for profile access, including read/write permissions for basic info, addresses, and subscriptions. - Updated installation documentation to reflect new audience settings for authentication resources. - Improved OpenAPI documentation with new profile scopes and authorization models. - Created a comprehensive member upgrade plan outlining system settings, email verification, account roles, and subscription management.
78 lines
3.5 KiB
Markdown
78 lines
3.5 KiB
Markdown
# 會員平台(Member Center)
|
||
|
||
此專案為多網站共用的會員登入中心與電子報訂閱管理平台。文件統一放在 `docs/`。
|
||
|
||
## 目標(MVP)
|
||
- 多個網站共用的會員登入中心(SSO)
|
||
- OAuth2 + OIDC 登入(API 與 Redirect 兩種方式)
|
||
- 電子報訂閱管理(含未註冊訂閱)
|
||
- 未註冊訂閱者可自行取消訂閱
|
||
- 未註冊訂閱者未來註冊可沿用訂閱資料
|
||
|
||
## 既定條件
|
||
- OAuth2 + OIDC
|
||
- 會員中心只負責 Email/訂閱管理,發送系統另建
|
||
- 訂閱採 double opt-in
|
||
- 各站各自設計 UI,主要走 API;少數狀況使用 redirect
|
||
- 會員資料跨站共享(邏輯隔離)
|
||
- 訂閱事件同步採 event/queue
|
||
- DB:PostgreSQL
|
||
- 開發:C# .NET Core + MVC + OpenIddict
|
||
|
||
## 範圍(第一階段)
|
||
- 多租戶(站點)概念與基本設定
|
||
- 會員與訂閱者 Email 身分識別
|
||
- OAuth2/OIDC 授權(Authorization Code + PKCE)
|
||
- 訂閱/取消訂閱流程(含未註冊)
|
||
- 基本管理後台(核心 CRUD)
|
||
|
||
## 非目標(暫不處理)
|
||
- 第三方社群登入
|
||
- MFA
|
||
- 行銷自動化或行為追蹤
|
||
- 金流/付費會員
|
||
|
||
## 文件
|
||
- `docs/DESIGN.md`:系統設計總覽、核心模組、資料模型與流程原則
|
||
- `docs/UI.md`:UI 路由規劃與 Use Cases 對應
|
||
- `docs/USE_CASES.md`:需求用例(角色、情境、驗收)
|
||
- `docs/FLOWS.md`:主要業務流程(註冊、登入、訂閱、退訂、管理)
|
||
- `docs/OPENAPI.md`:API 規格說明與補充規則
|
||
- `docs/openapi.yaml`:OpenAPI 3.1 正式規格檔
|
||
- `docs/SCHEMA.sql`:資料庫 schema(PostgreSQL)
|
||
- `docs/SEED.sql`:初始化/測試資料
|
||
- `docs/MESSMAIL.md`:租戶站台介接指引(訂閱/退訂/發信)
|
||
- `docs/TECH_STACK.md`:技術棧與選型
|
||
- `docs/INSTALL.md`:安裝、初始化與維運指令
|
||
- `docs/MEMBER_UPGRADE_PLAN.md`:會員中心下一階段升級規劃(設定畫面、SMTP、Email 驗證、忘記密碼、角色分級)
|
||
|
||
## 專案結構
|
||
```text
|
||
member_center/
|
||
├── src/
|
||
│ ├── MemberCenter.Api/ # REST API(OAuth/OIDC、訂閱、管理 API)
|
||
│ ├── MemberCenter.Web/ # MVC Web UI(client-first 會員介面 + Areas/Admin 管理介面)
|
||
│ ├── MemberCenter.Installer/ # 安裝與初始化 CLI(migrate/init/admin)
|
||
│ ├── MemberCenter.Application/ # 應用層介面與 DTO
|
||
│ ├── MemberCenter.Infrastructure/# EF Core、Identity、OpenIddict、服務實作
|
||
│ └── MemberCenter.Domain/ # 領域實體與常數
|
||
├── docs/ # 專案文件
|
||
├── .vscode/ # 本機開發啟動與工作設定
|
||
├── MemberCenter.sln # Solution
|
||
└── README.md
|
||
```
|
||
|
||
## 待確認事項
|
||
- OAuth2 scopes 與最小 claims(email/profile)
|
||
- 事件系統選擇(Kafka/RabbitMQ/SNS+SQS)
|
||
- 取消訂閱的 UI 形式(純一鍵或提供偏好)
|
||
- GDPR/CCPA 資料匯出與刪除是否納入第一期
|
||
|
||
## 目前 UI / Auth 狀態
|
||
- `MemberCenter.Web` 採單一登入入口,client 與 admin 共用同一套帳號。
|
||
- `admin` role 使用者在 client 主介面中可看到 `Admin` 功能群組。
|
||
- `/admin/*` 已移至 `Areas/Admin`,未登入或非 admin 存取時一律回 `404`。
|
||
- 本地註冊維持 `UserName = Email`,新帳號預設為未認證但可登入。
|
||
- 已支援 Google external login / register 與同 email auto-link。
|
||
- 註冊或 external login 建立帳號後,若已存在同 email 訂閱資料,會自動補 `newsletter_subscriptions.user_id`、寫入 audit log,並發送 `subscription.linked_to_user` 事件。
|