Files
hr-portal/PROJECT_STATUS.md
Porsche Chen 360533393f feat: HR Portal - Complete Multi-Tenant System with Redis Session Storage
Major Features:
-  Multi-tenant architecture (tenant isolation)
-  Employee CRUD with lifecycle management (onboarding/offboarding)
-  Department tree structure with email domain management
-  Company info management (single-record editing)
-  System functions CRUD (permission management)
-  Email account management (multi-account per employee)
-  Keycloak SSO integration (auth.lab.taipei)
-  Redis session storage (10.1.0.254:6379)
  - Solves Cookie 4KB limitation
  - Cross-system session sharing
  - Sliding expiration (8 hours)
  - Automatic token refresh

Technical Stack:
Backend:
- FastAPI + SQLAlchemy
- PostgreSQL 16 (10.1.0.20:5433)
- Keycloak Admin API integration
- Docker Mailserver integration (SSH)
- Alembic migrations

Frontend:
- Next.js 14 (App Router)
- NextAuth 4 with Keycloak Provider
- Redis session storage (ioredis)
- Tailwind CSS

Infrastructure:
- Redis 7 (10.1.0.254:6379) - Session + Cache
- Keycloak 26.1.0 (auth.lab.taipei)
- Docker Mailserver (10.1.0.254)

Architecture Highlights:
- Session管理由 Keycloak + Redis 統一控制
- 支援多系統 (HR/WebMail/Calendar/Drive/Office) 共享 session
- Token 自動刷新,異質服務整合
- 未來可無縫遷移到雲端

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-23 20:12:43 +08:00

13 KiB

HR Portal v2.0 專案狀態報告

專案版本: v2.0 開發開始: 2026-02-10 最後更新: 2026-02-11 專案負責人: Porsche Chen


📊 總體進度

階段 完成度 狀態
Phase 1: 基礎建設 100% 已完成
Phase 2: 核心功能整合 0% 待開始
Phase 3: 資源管理整合 0% 待開始
Phase 4: 測試與優化 0% 待開始
總體完成度 40% 🟢 進行中

Phase 1: 基礎建設 (已完成 100%)

1.1 資料庫設計

位置: 3.Develop/4.HR_Portal/database/

檔案 說明 狀態
schema.sql PostgreSQL Schema v2.0
test_schema.sql 完整測試腳本
docker-compose.yml PostgreSQL + pgAdmin 測試環境
TESTING.md 測試指南
README.md 資料庫說明文件

核心表格 (6 個):

  • employees - 員工基本資料
  • business_units - 事業部
  • departments - 部門
  • employee_identities - 員工身份 (多對多)
  • network_drives - 網路硬碟 (一對一)
  • audit_logs - 審計日誌

初始資料:

  • 3 個事業部 (業務發展部、智能發展部、營運管理部)
  • 9 個部門

1.2 後端 API

位置: 3.Develop/4.HR_Portal/backend/

SQLAlchemy Models (6 個)

  • Employee - 員工基本資料 (含狀態 Enum)
  • BusinessUnit - 事業部
  • Department - 部門
  • EmployeeIdentity - 員工身份
  • NetworkDrive - 網路硬碟
  • AuditLog - 審計日誌

Pydantic Schemas (8 個模組)

  • base - 基礎 Schema、分頁
  • employee - 員工 CRUD Schema
  • business_unit - 事業部 CRUD Schema
  • department - 部門 CRUD Schema
  • employee_identity - 身份 CRUD Schema
  • network_drive - 網路硬碟 CRUD Schema
  • audit_log - 審計日誌 Schema
  • response - 通用響應 Schema

API 端點 (35 個)

模組 端點數 完成度
員工管理 7 100%
事業部管理 6 100%
部門管理 5 100%
身份管理 5 100%
網路硬碟管理 7 100%
審計日誌 5 100%

核心配置

  • core/config.py - Pydantic Settings 環境變數管理
  • core/logging_config.py - 日誌系統 (支援 JSON 格式)
  • .env.example - 環境變數範例
  • requirements.txt - 完整依賴清單

文檔

  • README.md - 專案說明
  • PROGRESS.md - 開發進度
  • API_COMPLETE.md - API 完成摘要

🎯 核心功能特色

1. 員工多身份設計

設計理念:

  • 一個員工 (employees) 可以有多個身份 (employee_identities)
  • 每個身份對應一個事業部
  • 同事業部多部門 → 共用一個 SSO 帳號
  • 跨事業部 → 獨立的 SSO 帳號

SSO 帳號命名規則:

格式: {username_base}@{email_domain}

範例:
- porsche.chen@lab.taipei (智能發展部)
- porsche.chen@ease.taipei (業務發展部)
- porsche.chen@porscheworld.tw (營運管理部)

NAS 帳號規則:

  • 一個員工只有一個 NAS 帳號
  • 帳號名稱 = username_base
  • 配額由所有身份中的最高職級決定

2. 完整的 CRUD API

支援功能:

  • 分頁 (page, page_size)
  • 搜尋 (關鍵字搜尋)
  • 篩選 (狀態、事業部、部門等)
  • 軟刪除 (保留資料)
  • 自動化 (員工編號、SSO 帳號生成)

3. 資料完整性保證

約束:

  • 外鍵約束 (ON DELETE CASCADE)
  • 唯一約束 (防止重複資料)
  • 索引優化 (查詢性能)

業務規則驗證:

  • 同一員工在同一事業部只能有一個身份
  • 一個員工只能有一個 NAS 帳號
  • 無法刪除員工的最後一個身份
  • 無法停用有活躍員工的事業部/部門

4. 審計日誌

記錄內容:

  • 操作類型 (create/update/delete/login)
  • 資源類型 (employee/identity/department)
  • 操作者 (SSO 帳號)
  • 時間戳記
  • 詳細變更內容 (JSONB)
  • IP 位址

查詢功能:

  • 按時間範圍篩選
  • 按資源類型篩選
  • 按操作者篩選
  • 統計分析 (Top 10 用戶、操作分布)

📋 待實作功能

Phase 2: 核心功能整合 (預計 1 週)

2.1 Keycloak SSO 整合

  • 創建 services/keycloak_service.py
  • JWT Token 驗證中間件
  • 自動創建 Keycloak 帳號 (創建身份時)
  • 自動停用 Keycloak 帳號 (停用身份時)
  • 獲取用戶資訊
  • 權限管理

依賴項:

# app/api/deps.py
def get_current_user(
    token: str = Depends(oauth2_scheme),
    db: Session = Depends(get_db)
) -> User:
    """獲取當前登入用戶"""
    # TODO: 實作 Keycloak Token 驗證
    pass

def check_permission(required_permission: str):
    """檢查用戶權限"""
    # TODO: 實作權限檢查
    pass

2.2 審計日誌服務

  • 創建 services/audit_service.py
  • 自動記錄 CRUD 操作
  • 中間件或裝飾器實作
  • 獲取客戶端 IP

實作方式:

# 方式 1: 裝飾器
@audit_log(action="create", resource_type="employee")
def create_employee(...):
    pass

# 方式 2: 服務調用
audit_service.log(
    action="create",
    resource_type="employee",
    resource_id=employee.id,
    performed_by=current_user.username,
    details={...}
)

2.3 權限控制

  • 定義角色 (Admin, HR Manager, Department Manager, Employee)
  • 實作基於角色的訪問控制 (RBAC)
  • API 端點權限裝飾器
  • 資料級權限 (只能查看/修改自己部門的資料)

2.4 單元測試

  • 創建 tests/ 目錄結構
  • Models 測試
  • Schemas 測試
  • API 端點測試
  • 覆蓋率 > 80%

測試框架: pytest + pytest-asyncio

Phase 3: 資源管理整合 (預計 1 週)

3.1 郵件服務整合

  • 創建 services/mail_service.py
  • Docker Mailserver API 整合
  • 創建郵件帳號
  • 設定配額
  • 刪除/停用郵件帳號
  • 查詢使用量

郵件配額規則:

  • Junior: 1000 MB
  • Mid: 2000 MB
  • Senior: 5000 MB
  • Manager: 10000 MB

3.2 NAS 服務整合

  • 創建 services/nas_service.py
  • Synology API 整合
  • 創建 NAS 帳號
  • 設定配額
  • 刪除/停用 NAS 帳號
  • 查詢使用量
  • WebDAV/SMB 路徑管理

NAS 配額規則:

  • Junior: 50 GB
  • Mid: 100 GB
  • Senior: 200 GB
  • Manager: 500 GB

3.3 配額自動計算

  • 根據職級自動設定郵件配額
  • 根據最高職級自動設定 NAS 配額
  • 職級變更時自動更新配額
  • 配額警示 (使用率 > 80%)

3.4 整合測試

  • 端到端測試
  • Keycloak 整合測試
  • 郵件服務整合測試
  • NAS 服務整合測試
  • 完整流程測試 (創建員工 → 創建所有資源)

Phase 4: 前端開發 (預計 2 週)

4.1 React 專案初始化

  • 創建 frontend/ 目錄
  • Vite + React + TypeScript 設置
  • Tailwind CSS 配置
  • React Router 配置
  • TanStack Query (React Query) 配置

4.2 UI 組件開發

  • 員工列表頁面
  • 員工詳情頁面
  • 員工創建/編輯表單
  • 身份管理頁面
  • 組織架構管理頁面
  • 審計日誌查詢頁面

4.3 Keycloak 前端整合

  • Keycloak JS 客戶端配置
  • 登入/登出流程
  • Token 自動刷新
  • 受保護的路由

🗂️ 檔案清單

資料庫 (database/)

database/
├── schema.sql              # PostgreSQL Schema v2.0
├── test_schema.sql         # 測試腳本 (9 個測試項目)
├── docker-compose.yml      # PostgreSQL 16 + pgAdmin 4
├── TESTING.md              # 測試指南 (完整文檔)
└── README.md               # 資料庫說明

後端 (backend/)

backend/
├── app/
│   ├── core/
│   │   ├── config.py                   # 環境配置
│   │   ├── logging_config.py           # 日誌配置
│   │   └── __init__.py
│   ├── db/
│   │   ├── base.py                     # Base 類別
│   │   ├── session.py                  # Session 管理
│   │   └── __init__.py
│   ├── models/
│   │   ├── employee.py                 # Employee Model
│   │   ├── business_unit.py            # BusinessUnit Model
│   │   ├── department.py               # Department Model
│   │   ├── employee_identity.py        # EmployeeIdentity Model
│   │   ├── network_drive.py            # NetworkDrive Model
│   │   ├── audit_log.py                # AuditLog Model
│   │   └── __init__.py
│   ├── schemas/
│   │   ├── base.py                     # 基礎 Schema
│   │   ├── employee.py                 # Employee Schemas
│   │   ├── business_unit.py            # BusinessUnit Schemas
│   │   ├── department.py               # Department Schemas
│   │   ├── employee_identity.py        # EmployeeIdentity Schemas
│   │   ├── network_drive.py            # NetworkDrive Schemas
│   │   ├── audit_log.py                # AuditLog Schemas
│   │   ├── response.py                 # 通用響應 Schema
│   │   └── __init__.py
│   ├── api/
│   │   ├── deps.py                     # 依賴注入
│   │   ├── v1/
│   │   │   ├── router.py               # 主路由
│   │   │   ├── employees.py            # 員工 API (7 個端點)
│   │   │   ├── business_units.py       # 事業部 API (6 個端點)
│   │   │   ├── departments.py          # 部門 API (5 個端點)
│   │   │   ├── identities.py           # 身份 API (5 個端點)
│   │   │   ├── network_drives.py       # 網路硬碟 API (7 個端點)
│   │   │   ├── audit_logs.py           # 審計日誌 API (5 個端點)
│   │   │   └── __init__.py
│   │   └── __init__.py
│   ├── services/                       # 業務邏輯服務 (待開發)
│   │   └── __init__.py
│   ├── main.py                         # FastAPI 主程式
│   └── __init__.py
├── tests/                              # 測試 (待開發)
├── alembic/                            # 資料庫遷移 (待設置)
├── requirements.txt                    # Python 依賴
├── .env.example                        # 環境變數範例
├── .gitignore                          # Git 忽略清單
├── README.md                           # 專案說明
├── PROGRESS.md                         # 開發進度
└── API_COMPLETE.md                     # API 完成摘要

前端 (frontend/) - 待創建

frontend/                               # 待創建
├── src/
│   ├── components/
│   ├── pages/
│   ├── lib/
│   ├── hooks/
│   └── routes/
├── public/
├── package.json
└── README.md

📈 統計數據

代碼統計

  • Python 文件: 30+
  • 代碼行數: 約 3500+ 行
  • SQL 代碼: 約 230 行
  • 文檔: 6 個 Markdown 文件

功能統計

  • 資料庫表格: 6 個
  • SQLAlchemy Models: 6 個
  • Pydantic Schema 模組: 8 個
  • API 端點: 35 個
  • 已測試: 資料庫 Schema (9 個測試項目)

🚀 如何啟動

1. 資料庫

cd W:\DevOps-Workspace\3.Develop\4.HR_Portal\database
docker-compose up -d

# 測試
docker exec -i hr-portal-db-test psql -U hr_admin -d hr_portal < test_schema.sql

2. 後端 API

cd W:\DevOps-Workspace\3.Develop\4.HR_Portal\backend

# 創建虛擬環境
python -m venv venv
venv\Scripts\activate

# 安裝依賴
pip install -r requirements.txt

# 配置環境變數
cp .env.example .env
# 編輯 .env

# 啟動開發伺服器
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

訪問:

3. pgAdmin (資料庫管理)


🎯 下一步行動

立即可做 (本週)

  1. 完成 Phase 1 基礎建設 (已完成)
  2. 實作 Keycloak 服務整合
  3. 實作審計日誌自動記錄
  4. 添加單元測試

短期目標 (2 週內)

  1. 實作權限控制
  2. 郵件服務整合
  3. NAS 服務整合
  4. 整合測試

中期目標 (1 個月內)

  1. React 前端開發
  2. 完整的端到端測試
  3. 生產環境部署

📝 備註

重要設計決策

  1. 軟刪除策略

    • 所有刪除操作都是軟刪除
    • 只標記為停用,不實際刪除資料
    • 保留審計追蹤
  2. 自動化原則

    • 員工編號自動生成 (EMP001, EMP002, ...)
    • SSO 帳號自動生成 (username_base@email_domain)
    • 主要身份自動管理
  3. 多身份設計

    • 符合實際業務需求
    • 支援跨部門、跨事業部工作
    • SSO 帳號和郵件帳號一一對應
  4. 資料完整性優先

    • 嚴格的外鍵約束
    • 業務規則驗證
    • 防止資料不一致

技術債

  • Alembic 遷移設置 (目前使用 SQLAlchemy 自動創建)
  • API 版本控制策略
  • 錯誤訊息國際化
  • 性能優化 (查詢優化、快取策略)

專案狀態: 🟢 健康 風險評估: 🟢 低風險 下一個里程碑: Phase 2 完成 (預計 1 週後)

最後更新: 2026-02-11 更新者: Claude AI