本次開發已成功為 OpenPassExam 應用程式建構兼具 Google 帳號登入 (Firebase Auth + google_sign_in 雙模架構) 與 全站角色權限控管 (RBAC Matrix) 的完整功能。
firebase_auth 與 google_sign_in: ^7.2.0(利用 GoogleSignIn.instance.authenticate() 與 GoogleAuthProvider 串接 Firebase)。UserRole.viewer)」,具備刷題、模擬考、討論區互動權限。alan.nanpie@gmail.com、admin.pass@gmail.com)時,系統自動賦予最高權限 「👑 系統管理員 (UserRole.admin)」。AdminDashboardScreen 新增第 4 個管理分頁 「會員角色權限管理」。viewer)點擊「自建考科」或「新增考題」時,主動彈出「需要出題創作者權限」溫馨說明。isAdmin == true 之使用者開放。| 檔案路徑 | 異動重點說明 |
|---|---|
| pubspec.yaml | 引入 firebase_core, firebase_auth, google_sign_in 套件 |
| lib/core/constants/app_constants.dart | 新增 adminEmailWhitelist 管理員白名單與使用者快取鍵名 |
| lib/data/models/app_user.dart | 修正 RBAC 矩陣:出題與建科嚴格限定 admin 或 creator |
| lib/services/auth_service.dart | [NEW] 封裝 Google OAuth 認證與 Firebase Auth 串接及降級處理 |
| lib/data/repositories/user_repository.dart | 實做 getAllUsers()、updateUserRole(),支援白名單與預設學員邏輯 |
| lib/controllers/auth_controller.dart | 整合 AuthService,新增真實 Google 登入與即時 reloadUser() |
| lib/controllers/admin_controller.dart | 新增使用者列表載入、搜尋過濾與會員角色切換功能 |
| lib/core/widgets/permission_guard_dialog.dart | [NEW] 權限攔截對話框,引導訪客登入與學員申請出題者身分 |
| lib/views/admin/user_role_management_screen.dart | [NEW] 系統管理員「全站會員角色管理」分頁介面 |
| lib/views/admin/admin_dashboard_screen.dart | 擴充 TabBar 為 4 個分頁,整合會員權限管理 |
| lib/views/auth/login_screen.dart | 連接真實 Google 登入與降級模式,更新快速測試帳號標籤 |
| lib/views/home/home_screen.dart | 套用 PermissionGuard 防護自建考科入口,限縮管理員圖示 |
| lib/views/home/subject_detail_screen.dart | 套用 PermissionGuard 防護科目下「新增考題」入口 |
| lib/views/mock_exam/mock_exam_screen.dart | 套用 PermissionGuard 於啟動全真模擬考前檢驗登入狀態 |
| lib/views/practice/question_discussion_sheet.dart | 套用 PermissionGuard 於考題討論區發表留言前檢驗登入狀態 |
| test/unit/google_auth_and_rbac_test.dart | 擴充單元測試驗證白名單提升、預設學員指派與後台角色變更 |
執行全套單元與整合測試,包含新增之白名單提升與角色變更測試,全數 56+ 個測試通過:
00:00 +7: 全站會員角色管理與管理員白名單測試 一般 Google 帳號首次登入,未指定角色時預設指派為 viewer (備考學員)
00:00 +8: 全站會員角色管理與管理員白名單測試 命中管理員白名單之 Google 帳號 (如 alan.nanpie@gmail.com) 登入自動成為 admin
00:00 +9: 全站會員角色管理與管理員白名單測試 管理員可查詢所有會員清單並指派/升級會員角色
00:00 +10: All tests passed!
執行 flutter analyze,所有編譯錯誤、未解析的型態與 unused import 均已修復,專案程式碼架構健全。