366 lines
8.3 KiB
Markdown
366 lines
8.3 KiB
Markdown
# 暫時規範管理系統 V3
|
||
|
||
企業級暫時規範生命週期管理系統,提供完整的文件管理、LDAP整合驗證、智慧通知系統及排程提醒功能。
|
||
|
||
## 🚀 系統特色
|
||
|
||
- **LDAP/AD 整合驗證**:支援企業Active Directory單一登入
|
||
- **ONLYOFFICE 線上編輯**:即時協作文件編輯功能
|
||
- **智慧通知系統**:動態收件人選擇與自動提醒
|
||
- **文件生命週期管理**:完整的建立、啟用、展延、終止流程
|
||
- **多平台支援**:支援 Windows/Linux 環境部署
|
||
- **Docker 容器化**:一鍵部署環境
|
||
|
||
## 📋 功能模組
|
||
|
||
### 核心功能
|
||
- **文件管理**:Word範本自動化生成與PDF轉換
|
||
- **權限控制**:三級權限管理 (Viewer/Editor/Admin)
|
||
- **歷史追蹤**:完整的操作記錄與版本控制
|
||
- **檔案上傳**:支援多種格式的佐證文件上傳
|
||
|
||
### 智慧通知系統
|
||
- **動態收件人選擇**:整合LDAP的即時用戶搜尋
|
||
- **郵件記憶功能**:自動記憶並帶出之前使用的通知對象
|
||
- **全流程通知**:啟用、展延、終止操作的自動郵件通知
|
||
- **自動提醒**:3天與7天到期前的主動提醒郵件
|
||
- **排程系統**:每日自動檢查即將到期的規範
|
||
|
||
### 編輯器整合
|
||
- **ONLYOFFICE整合**:支援Word文件的線上即時編輯
|
||
- **Toast UI Editor**:Markdown格式的內容編輯器
|
||
- **圖片支援**:內嵌圖片顯示與編輯功能
|
||
|
||
## 🏗️ 系統架構
|
||
|
||
```
|
||
暫時規範系統 V3
|
||
├── 前端介面 (Flask + Bootstrap 5)
|
||
├── 後端邏輯 (Python Flask)
|
||
├── 資料庫 (MySQL/SQLite)
|
||
├── LDAP整合 (Active Directory)
|
||
├── 文件引擎 (ONLYOFFICE)
|
||
├── 排程服務 (APScheduler)
|
||
└── 郵件系統 (SMTP)
|
||
```
|
||
|
||
## 🛠️ 技術棧
|
||
|
||
- **後端框架**:Python Flask 3.x
|
||
- **資料庫ORM**:SQLAlchemy
|
||
- **前端UI**:Bootstrap 5 + Tom Select
|
||
- **文件處理**:python-docx, docx2pdf
|
||
- **認證系統**:Flask-Login + LDAP3
|
||
- **排程系統**:Flask-APScheduler
|
||
- **容器化**:Docker + Docker Compose
|
||
|
||
## 📦 安裝部署
|
||
|
||
### 前置需求
|
||
|
||
- Python 3.8+
|
||
- MySQL 8.0+ 或 SQLite
|
||
- ONLYOFFICE Document Server
|
||
- LDAP/Active Directory 伺服器
|
||
- SMTP 郵件伺服器
|
||
|
||
### 快速開始 (Docker)
|
||
|
||
1. **克隆專案**
|
||
```bash
|
||
git clone <repository-url>
|
||
cd TEMP_spec_system_V3
|
||
```
|
||
|
||
2. **設定環境變數**
|
||
```bash
|
||
cp .env.example .env
|
||
# 編輯 .env 檔案設定資料庫、LDAP、SMTP 等參數
|
||
```
|
||
|
||
3. **使用Docker Compose啟動**
|
||
```bash
|
||
docker-compose up -d
|
||
```
|
||
|
||
4. **初始化資料庫**
|
||
```bash
|
||
docker-compose exec app python init_db.py
|
||
```
|
||
|
||
5. **資料庫遷移(如果需要)**
|
||
```bash
|
||
# 新增郵件功能欄位
|
||
docker-compose exec app python migrate_add_email_column.py
|
||
```
|
||
|
||
### 手動安裝
|
||
|
||
#### Windows 環境
|
||
|
||
1. **安裝Python依賴**
|
||
```cmd
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
2. **設定環境變數**
|
||
```cmd
|
||
copy .env.example .env
|
||
REM 編輯 .env 檔案
|
||
```
|
||
|
||
3. **初始化資料庫**
|
||
```cmd
|
||
python init_db.py
|
||
```
|
||
|
||
4. **資料庫遷移(如果需要)**
|
||
```cmd
|
||
python migrate_add_email_column.py
|
||
```
|
||
|
||
5. **啟動 ONLYOFFICE Document Server**
|
||
```cmd
|
||
docker run -d -p 8080:80 --restart=always ^
|
||
-e JWT_ENABLED=true ^
|
||
-e JWT_SECRET=your-onlyoffice-jwt-secret-string ^
|
||
onlyoffice/documentserver
|
||
```
|
||
|
||
6. **啟動應用程式**
|
||
```cmd
|
||
REM 開發環境
|
||
python app.py
|
||
|
||
REM 生產環境 (Windows 建議使用 Waitress)
|
||
pip install waitress
|
||
waitress-serve --host=0.0.0.0 --port=5000 app:app
|
||
```
|
||
|
||
#### Linux 環境
|
||
|
||
1. **安裝Python依賴**
|
||
```bash
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
2. **設定環境變數**
|
||
```bash
|
||
cp .env.example .env
|
||
# 編輯 .env 檔案
|
||
```
|
||
|
||
3. **初始化資料庫**
|
||
```bash
|
||
python init_db.py
|
||
```
|
||
|
||
4. **資料庫遷移(如果需要)**
|
||
```bash
|
||
python migrate_add_email_column.py
|
||
```
|
||
|
||
5. **啟動 ONLYOFFICE Document Server**
|
||
```bash
|
||
docker run -d -p 8080:80 --restart=always \
|
||
-e JWT_ENABLED=true \
|
||
-e JWT_SECRET=your-onlyoffice-jwt-secret-string \
|
||
onlyoffice/documentserver
|
||
```
|
||
|
||
6. **啟動應用程式**
|
||
```bash
|
||
# 開發環境
|
||
python app.py
|
||
|
||
# 生產環境 (使用 Gunicorn)
|
||
pip install gunicorn
|
||
gunicorn -w 4 -b 0.0.0.0:5000 app:app
|
||
```
|
||
|
||
## ⚙️ 組態設定
|
||
|
||
### 環境變數 (.env)
|
||
|
||
```env
|
||
# Flask 設定
|
||
SECRET_KEY=your_secret_key_here
|
||
UPLOAD_FOLDER=uploads
|
||
|
||
# 資料庫設定
|
||
DATABASE_URL=mysql+pymysql://user:password@localhost/tempspec_db
|
||
|
||
# LDAP 設定
|
||
LDAP_SERVER=ldap://your-dc.company.com
|
||
LDAP_PORT=389
|
||
LDAP_USE_SSL=False
|
||
LDAP_SEARCH_BASE=DC=company,DC=com
|
||
LDAP_BIND_USER_DN=CN=service,DC=company,DC=com
|
||
LDAP_BIND_USER_PASSWORD=service_password
|
||
LDAP_USER_LOGIN_ATTR=userPrincipalName
|
||
|
||
# SMTP 郵件設定 (Port 25 無認證方式)
|
||
SMTP_SERVER=mail.company.com
|
||
SMTP_PORT=25
|
||
SMTP_USE_TLS=false
|
||
SMTP_USE_SSL=false
|
||
SMTP_AUTH_REQUIRED=false
|
||
SMTP_SENDER_EMAIL=temp-spec-system@company.com
|
||
SMTP_SENDER_PASSWORD=
|
||
|
||
# ONLYOFFICE 設定
|
||
ONLYOFFICE_URL=http://onlyoffice:8080
|
||
ONLYOFFICE_JWT_SECRET=your_jwt_secret
|
||
```
|
||
|
||
### SMTP 配置說明
|
||
|
||
系統支援多種 SMTP 配置方式:
|
||
|
||
- **Port 25(推薦)**:內部郵件伺服器,無需認證
|
||
- **Port 587**:STARTTLS + 認證
|
||
- **Port 465**:SSL + 認證
|
||
|
||
詳細設定請參考 `SMTP_CONFIGURATION_UPDATE.md`
|
||
|
||
## 📚 使用說明
|
||
|
||
### 登入規範
|
||
|
||
**重要**:系統要求使用完整的UPN格式帳號登入
|
||
|
||
✅ **正確格式**:`user@domain.com`
|
||
❌ **錯誤格式**:`user`
|
||
|
||
### 初次設定管理員
|
||
|
||
系統預設所有使用者為 `viewer` 權限。設定管理員的方式:
|
||
|
||
1. **程式設定**:修改 `routes/auth.py` 中的預設管理員帳號
|
||
|
||
2. **手動設定**:在資料庫中更新用戶權限:
|
||
```sql
|
||
UPDATE ts_user SET role='admin' WHERE username='user@domain.com';
|
||
```
|
||
|
||
### 郵件通知功能
|
||
|
||
系統具備智慧郵件管理功能:
|
||
|
||
1. **規範生效時**:輸入通知郵件對象,系統自動記憶
|
||
2. **規範終止時**:自動帶出生效時使用的郵件清單,可編輯後發送
|
||
3. **規範展延時**:自動帶出郵件清單,修改後更新記錄
|
||
|
||
### 排程任務
|
||
|
||
系統預設每天凌晨 2:00 執行到期檢查任務:
|
||
|
||
- 7天到期提醒
|
||
- 3天到期提醒
|
||
- 自動發送提醒郵件
|
||
|
||
## 🔐 安全性設定
|
||
|
||
### LDAP 整合
|
||
- 支援 SSL/TLS 加密連線
|
||
- 服務帳號權限最小化原則
|
||
- 自動用戶同步與權限管控
|
||
|
||
### 資料保護
|
||
- JWT Token 驗證
|
||
- 檔案存取權限控制
|
||
- SQL Injection 防護
|
||
- XSS 攻擊防護
|
||
|
||
## 🐛 疑難排解
|
||
|
||
### 常見問題
|
||
|
||
1. **LDAP 連線失敗**
|
||
- 檢查防火牆設定 (通常是 389/636 port)
|
||
- 確認服務帳號權限
|
||
- 驗證 LDAP 伺服器位址和搜尋基底
|
||
|
||
2. **ONLYOFFICE 無法載入**
|
||
- 確認 Document Server 運行狀態:`docker ps`
|
||
- 檢查網路連線設定
|
||
- 驗證 JWT Secret 設定是否一致
|
||
|
||
3. **郵件發送失敗**
|
||
- 確認 SMTP 設定正確
|
||
- 檢查郵件伺服器認證設定
|
||
- 驗證防火牆規則 (Port 25/587/465)
|
||
|
||
4. **排程任務未執行**
|
||
- 檢查 APScheduler 初始化
|
||
- 確認應用程式持續運行
|
||
- 查看系統日誌
|
||
|
||
### 日誌查看
|
||
|
||
```bash
|
||
# Docker 環境
|
||
docker-compose logs -f app
|
||
|
||
# 一般環境
|
||
tail -f logs/app.log
|
||
|
||
# Windows 環境
|
||
Get-Content logs/app.log -Tail 10 -Wait
|
||
```
|
||
|
||
## 🤝 開發指南
|
||
|
||
### 程式碼結構
|
||
|
||
```
|
||
├── app.py # 主應用程式
|
||
├── config.py # 組態設定
|
||
├── models.py # 資料模型
|
||
├── tasks.py # 排程任務
|
||
├── routes/ # 路由模組
|
||
│ ├── auth.py # 認證相關
|
||
│ ├── temp_spec.py # 暫規管理
|
||
│ ├── upload.py # 檔案上傳
|
||
│ └── api.py # API介面
|
||
├── templates/ # 前端範本
|
||
├── static/ # 靜態檔案
|
||
├── utils.py # 工具函式
|
||
└── ldap_utils.py # LDAP 工具
|
||
```
|
||
|
||
### 資料庫遷移
|
||
|
||
當系統需要資料庫結構更新時:
|
||
|
||
```bash
|
||
# 執行遷移腳本
|
||
python migrate_add_email_column.py
|
||
```
|
||
|
||
## 📄 授權條款
|
||
|
||
本專案採用 MIT 授權條款。
|
||
|
||
## 🆕 版本歷程
|
||
|
||
### v3.2.0 (最新版本)
|
||
- 🆕 新增郵件通知記憶功能
|
||
- 🆕 支援 Port 25 無認證 SMTP
|
||
- ♻️ 優化郵件管理邏輯
|
||
- 🗑️ 移除測試檔案和調試代碼
|
||
|
||
### v3.1.0
|
||
- 🆕 新增 LDAP/AD 整合驗證
|
||
- 🆕 整合 ONLYOFFICE 線上編輯器
|
||
- 🆕 實作智慧通知系統
|
||
- 🆕 新增自動排程提醒功能
|
||
- 🆕 支援 Docker 容器化部署
|
||
|
||
### v3.0.0
|
||
- ♻️ 重構權限管理系統
|
||
- 🗑️ 移除本地帳號管理功能
|
||
|
||
---
|
||
|
||
**暫時規範管理系統 V3** - 讓企業文件管理更智慧、更高效! |