Unit Tests (30 tests): - auth_service: LDAP 認證、管理員檢查 - page_registry: 頁面狀態管理、並發安全 - permissions: 權限檢查函數、裝飾器 Integration Tests (17 tests): - 登入/登出路由 - 權限中介層 - Admin API - Context Processor E2E Tests (10 tests): - 完整登入登出流程 - 頁面存取控制 - 頁面管理流程 - Portal 動態 tabs - Session 持久性 - 安全性場景 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3.7 KiB
3.7 KiB
Admin Auth 實作任務
後端任務
Task 1: 新增認證服務
- 建立
src/mes_dashboard/services/auth_service.py - 實作
authenticate(username, password, domain)函數 - 實作
is_admin(user)函數 - 新增 LDAP API 錯誤處理(timeout、連線失敗)
Task 2: 新增頁面狀態管理服務
- 建立
src/mes_dashboard/services/page_registry.py - 實作
get_page_status(route)函數 - 實作
set_page_status(route, status, name)函數 - 實作
get_all_pages()函數 - 建立
data/page_status.json初始設定檔(現有頁面設為 released)
Task 3: 新增權限檢查模組
- 建立
src/mes_dashboard/core/permissions.py - 實作
is_admin_logged_in()函數 - 實作
get_current_admin()函數 - 實作
@admin_required裝飾器
Task 4: 新增認證路由
- 建立
src/mes_dashboard/routes/auth_routes.py - 實作
GET /admin/login登入頁面 - 實作
POST /admin/login登入處理 - 實作
GET /admin/logout登出 - 在
routes/__init__.py註冊auth_bp
Task 5: 新增管理員路由
- 建立
src/mes_dashboard/routes/admin_routes.py - 實作
GET /admin/pages頁面管理介面 - 實作
GET /admin/api/pages取得所有頁面 - 實作
PUT /admin/api/pages/<route>更新頁面狀態 - 在
routes/__init__.py註冊admin_bp
Task 6: 修改 app.py
- 新增 Flask session 設定(SECRET_KEY)
- 新增
before_request權限檢查中介層 - 新增
context_processor注入is_admin、admin_user和can_view_page - 註冊 auth_bp 和 admin_bp
Task 7: 更新設定
- 在
config/settings.py新增LDAP_API_URL設定 - 在
config/settings.py新增ADMIN_EMAILS設定 - 在
config/settings.py新增SECRET_KEY設定 - 在
requirements.txt新增requests依賴
前端任務
Task 8: 建立登入頁面
- 建立
templates/login.html - 實作帳號/密碼輸入表單
- 實作錯誤訊息顯示
- 套用現有樣式(與 portal.html 一致)
Task 9: 建立頁面管理介面
- 建立
templates/admin/pages.html - 實作頁面列表表格(路由、名稱、狀態)
- 實作狀態切換功能(點擊切換 released/dev)
- 實作即時儲存(API 呼叫)
- 實作 Toast 通知
Task 10: 建立 403 頁面
- 建立
templates/403.html - 顯示「頁面開發中」訊息
- 提供返回首頁連結
Task 11: 修改導航列
- 在 portal.html 右上角加入管理員登入/登出連結
- 管理員登入後顯示名稱和「頁面管理」連結
- Dev 頁面 tabs 對非管理員隱藏(使用
can_view_page條件渲染)
測試任務
Task 12: 單元測試
- auth_service 測試(LDAP 認證、管理員檢查)
- page_registry 測試(頁面狀態讀寫、並發存取)
- permissions 測試(權限檢查、裝飾器)
Task 13: 整合測試
- 登入/登出路由測試
- 權限中介層測試(released/dev 頁面存取)
- Admin API 測試(頁面管理)
- Context Processor 測試
Task 14: E2E 測試
- 完整登入登出流程
- 頁面存取控制流程
- 頁面管理流程
- Portal 動態 tabs 顯示
- Session 持久性
- 安全性場景測試
部署任務
Task 15: 環境設定
- 建立初始 page_status.json(現有頁面設為 released)
- 設定生產環境 SECRET_KEY 環境變數(部署時處理)
- 確認 LDAP API 連線正常(手動測試通過)