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>
This commit is contained in:
2026-02-23 20:12:43 +08:00
commit 360533393f
386 changed files with 70353 additions and 0 deletions

View File

@@ -0,0 +1,191 @@
# HR Portal 驗證報告
**日期**: 2026-02-15
**驗證環境**: Windows 開發主機 10.1.0.245
**資料庫主機**: 10.1.0.20 (小的 NAS - Synology DS716+II)
---
## ✅ 資料庫驗證
### 資料庫配置
- **主機**: 10.1.0.20:5433
- **資料庫**: hr_portal
- **用戶**: admin
- **密碼**: DC1qaz2wsx ⚠️ (無 `!` 符號)
- **驅動**: PostgreSQL 16.11
### 資料庫結構
| 資料表名稱 | 筆數 | 說明 |
|-----------|------|------|
| alembic_version | 1 | 資料庫版本控制 |
| audit_logs | 0 | 審計日誌 |
| business_units | 0 | 事業單位 |
| departments | 0 | 部門 |
| employee_identities | 0 | 員工身份 (郵件/NAS/Keycloak) |
| employees | 0 | 員工基本資料 |
| network_drives | 0 | 網路磁碟配額 |
**Alembic 版本**: fba4e3f40f05
### 連接測試結果
```
[OK] PostgreSQL 版本: 16.11 (Debian 16.11-1.pgdg13+1)
[OK] 資料表數量: 7
[OK] 連接測試成功
```
---
## ✅ 後端驗證
### 後端配置
- **Port**: 10181 (固定,不可變更)
- **環境**: development
- **API 版本**: 2.0.0
- **資料庫 URL**: postgresql+psycopg2://admin:DC1qaz2wsx@10.1.0.20:5433/hr_portal
### Keycloak 整合
- **URL**: https://auth.ease.taipei
- **Realm**: porscheworld
- **Client ID**: hr-backend
- **Client Secret**: ddyW9zuy7sHDMF8HRh60gEoiGBh698Ew6XHKenwp2c0
### 模組載入測試
```
[OK] 配置模組 (app.core.config)
[OK] 資料庫模組 (app.db.session)
[OK] FastAPI 應用 (app.main)
[OK] API 端點數量: 54 個
```
### 依賴套件
- ✅ fastapi
- ✅ uvicorn
- ✅ sqlalchemy
- ✅ alembic
- ✅ psycopg2-binary
- ✅ python-keycloak
- ✅ python-dotenv
- ✅ pydantic
### 啟動命令
```bash
cd W:/DevOps-Workspace/5.Projects/hr-portal/backend
uvicorn app.main:app --host 0.0.0.0 --port 10181 --reload
```
或使用啟動腳本:
```bash
START_BACKEND.bat
```
### API 端點
- **API 文件**: http://localhost:10181/docs
- **ReDoc**: http://localhost:10181/redoc
- **健康檢查**: http://localhost:10181/health
---
## ⏳ 前端驗證 (待執行)
### 前端配置
- **Port**: 10180 (固定,不可變更)
- **API URL**: http://localhost:10181
- **Keycloak URL**: https://auth.ease.taipei
- **Realm**: porscheworld
- **Client ID**: hr-portal-web
### 啟動命令
```bash
cd W:/DevOps-Workspace/5.Projects/hr-portal/frontend
npm run dev -- -p 10180
```
或使用啟動腳本:
```bash
START_FRONTEND.bat
```
### 前端 URL
- **應用首頁**: http://localhost:10180
- **登入頁面**: http://localhost:10180/auth/signin
---
## 📋 重要注意事項
### 固定 Port 規定
⚠️ **嚴格遵守以下規定**:
- **前端固定 port: 10180** (不可變更)
- **後端固定 port: 10181** (不可變更)
- 遇到 port 衝突時,應停止占用程序,清空 port
- 嚴禁隨意開啟其他 port (3000, 3001, 8000, 8001 等)
- Keycloak 只認證規劃好的環境,不可任意添加新 port
### 資料庫密碼注意
⚠️ **PostgreSQL 密碼不能包含 `!` 符號**:
- ✅ 正確: `DC1qaz2wsx`
- ❌ 錯誤: `!DC1qaz2wsx`
- 原因: Shell 特殊字元導致遠端認證失敗
### 開發環境原則
**正確做法**:
- Port 被占用 → 找出占用的程序,停止它
- 環境不一致 → 找出根本原因,修正環境
- 遇到問題 → 分析根因,徹底解決
**錯誤做法**:
- Port 被占用 → 改用其他 port
- 認證失敗 → 在 Keycloak 添加更多 port
- 遇到問題 → 用容錯方式繞過
### 資料庫用戶統一
**所有開發都使用 admin 用戶**:
- 用戶名: admin
- 密碼: DC1qaz2wsx
- 原因: 簡化權限管理,避免權限問題
---
## 📊 測試檢查清單
### 後端測試
- [x] 環境變數載入
- [x] 資料庫連接
- [x] 配置模組載入
- [x] FastAPI 應用創建
- [x] API 路由註冊
- [ ] 後端實際啟動
- [ ] API 端點測試
- [ ] Keycloak SSO 登入
### 前端測試
- [ ] 依賴安裝 (npm install)
- [ ] 前端啟動
- [ ] 頁面載入
- [ ] Keycloak 登入流程
- [ ] API 調用測試
- [ ] 員工管理功能
### 整合測試
- [ ] 前後端通訊
- [ ] SSO 登入流程
- [ ] CRUD 操作
- [ ] 權限控制
---
## 🎯 下一步行動
1. 安裝前端依賴: `cd frontend && npm install`
2. 啟動後端: `START_BACKEND.bat`
3. 啟動前端: `START_FRONTEND.bat`
4. 測試 Keycloak 登入
5. 驗證 API 功能
6. 測試員工管理流程
---
**驗證人員**: Claude AI
**完成度**: 70% (後端驗證完成,前端待測試)