iT邦幫忙

2026 iThome 鐵人賽

0
Build on Google AI

將考國際證照的應用程式變成開源系列 第 65

Google 帳號登入與角色權限控管 (RBAC) 實做成果

  • 分享至 

  • xImage
  •  

Google 帳號登入與角色權限控管 (RBAC) 實做成果

本次開發已成功為 OpenPassExam 應用程式建構兼具 Google 帳號登入 (Firebase Auth + google_sign_in 雙模架構)全站角色權限控管 (RBAC Matrix) 的完整功能。


1. 核心功能亮點 (Key Highlights)

🔑 雙模 Google 帳號認證架構 (Dual-Mode Authentication)

  • 正式環境:無縫整合 firebase_authgoogle_sign_in: ^7.2.0(利用 GoogleSignIn.instance.authenticate() 與 GoogleAuthProvider 串接 Firebase)。
  • 開發/測試優雅降級:當處於未配置 Firebase 專案憑證之 Windows 桌面離線環境或開發者本機時,自動降級提供測試登入視窗,確保本機測試不崩潰且隨時可切換身分。

👑 管理員 Email 白名單與角色預設

  • 新註冊 Google 學員:登入時預設指派為 「🎓 備考學員 (UserRole.viewer)」,具備刷題、模擬考、討論區互動權限。
  • 管理員白名單自動提拔:命中常數白名單(如 alan.nanpie@gmail.comadmin.pass@gmail.com)時,系統自動賦予最高權限 「👑 系統管理員 (UserRole.admin)」

🛡️ 管理員專屬「會員角色權限管理」分頁

  • AdminDashboardScreen 新增第 4 個管理分頁 「會員角色權限管理」
  • 支援搜尋全站會員(依姓名、Email、UID、角色關鍵字篩選)。
  • 管理員可一鍵開啟角色指派面板,即時調整任何會員的身分等級(管理員、創作者、學員、測試員、待審核等),變更即時持久化生效。

🚦 靈活權限攔截守衛 (PermissionGuard)

  • 訪客攔截:未登入者嘗試使用全真模擬考、發表討論區留言或建立考科時,彈出友善登入對話框並提供前往 Google 登入入口。
  • 學員出題攔截:一般備考學員(viewer)點擊「自建考科」或「新增考題」時,主動彈出「需要出題創作者權限」溫馨說明。
  • 管理功能保護:管理員後台入口圖示與關鍵管理動作僅對 isAdmin == true 之使用者開放。

2. 異動檔案彙整 (Files Changed)

檔案路徑 異動重點說明
pubspec.yaml 引入 firebase_core, firebase_auth, google_sign_in 套件
lib/core/constants/app_constants.dart 新增 adminEmailWhitelist 管理員白名單與使用者快取鍵名
lib/data/models/app_user.dart 修正 RBAC 矩陣:出題與建科嚴格限定 admincreator
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 擴充單元測試驗證白名單提升、預設學員指派與後台角色變更

3. 測試驗證成果 (Verification Results)

自動化測試 (flutter test)

執行全套單元與整合測試,包含新增之白名單提升與角色變更測試,全數 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)

執行 flutter analyze,所有編譯錯誤、未解析的型態與 unused import 均已修復,專案程式碼架構健全。


上一篇
[ AI 助教] 整個排錯、架構調整與線上發布已全部到位
系列文
將考國際證照的應用程式變成開源65
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言