簡體   English   中英

Flutter/Firebase:管理功能是應用內功能還是雲功能?

[英]Flutter/Firebase: Admin features in-app or cloud functions?

我正在編寫一個帶有 Flutter 和 Firebase 的應用程序(到目前為止同時使用 Firestore、存儲和身份驗證)。

目前該應用程序顯示來自 Firebase 的內容,但現在我正在嘗試找出在 Firebase 中實現寫入/編輯/刪除內容的最佳方法。

目標是讓用戶擁有管理員權限。

我的問題是我是否可以在客戶端應用程序中構建一個管理面板(這將是理想的),或者這是否被認為是不好的做法,我應該在另一個應用程序中構建一個管理面板並使用 Cloud Functions。

例如,目前我在 Flutter/Dart 代碼中執行身份驗證(注冊/注冊),並在注冊時在 Firestore isAdmin = false中創建一個字段,然后我可以在 Firestore 控制台中手動將其設置為 true(如果我願意)。 這可能是一種“不安全”的方式嗎?

目標是讓用戶擁有管理員權限

由於您正在使用身份驗證服務,您已經擁有了一半的解決方案:通過身份驗證,您可以識別使用您的應用程序的每個用戶。

另一部分是授權:這通常是通過 Firebase 中的安全規則完成的,包括 Firestore 和 Cloud Storage。

為了能夠授權某些用戶(通過身份驗證識別)具有管理員權限,您需要知道哪些用戶具有管理員角色,以便授權他們執行管理員功能。

正如您在問題中提到的,識別管理員用戶的一種可能方法是在 Firestore 的某些用戶文檔中使用isAdmin標志。 文檔中有一個使用這種方法的 Firestore 安全規則示例。

但是,如果您想將此標志(存儲在 Firestore 中)與雲存儲的安全規則一起使用,則會遇到一些問題。 在撰寫本文時,無法在 Cloud Storage 的安全規則中讀取 Firestore 文檔的值。

解決方案是使用Custom Claims 您將在文檔中找到有關如何以滿足您需求的方式實施它的所有詳細信息。

我可以在客戶端應用程序中構建管理面板嗎?

是的,你可以很好地做到這一點。 只要您的安全性得到正確實施(通過身份驗證和安全規則,如上所述),就沒有什么可以阻止您開發管理面板。 如果不是管理員的用戶可以訪問管理面板,他/她將無法執行管理員操作(即寫入/編輯/刪除 Firestore 或 Cloud Storage 數據)。

此外,使用自定義聲明,您可以在前端訪問它們,以根據用戶的角色或訪問級別修改客戶端 UI(即,僅向管理員用戶顯示管理模塊的頁面、按鈕和菜單項 - 但請注意,這不會阻止某人對您的應用程序進行逆向工程並執行專用於管理員用戶的查詢:這就是正確實施身份驗證和安全規則部分的關鍵-)。 請參閱自定義聲明文檔中的此部分

我應該在另一個應用程序中構建一個管理面板並使用 Cloud Functions 嗎?

如果您不想使用某些邏輯來使您的應用程序過於復雜以隱藏/顯示管理面板元素(基於自定義聲明,請參見上文),您可以在另一個應用程序中構建管理面板。

如果您有無法通過標准安全規則實現的特定需求/訪問限制,您可以很好地使用一些 Cloud Functions 來檢查用戶是管理員並執行寫入/編輯/刪除管理員操作(但請注意,雖然它很從 Cloud Functions 與 Firestore 進行交互很容易,但使用 Storage 可能有點棘手:使用 Cloud Storage 客戶端 SDK 比通過 Cloud Functions 與 Cloud Storage 交互要容易得多)。

您最好使用 Callable Cloud Functions,因為“使用可調用函數,Firebase 身份驗證和 FCM 令牌(如果可用)會自動包含在請求中”。 (請參閱https://firebase.google.com/docs/functions/callable )。


旁注:您可能對本文感興趣,它詳細介紹了如何創建管理模塊來管理用戶訪問和角色。 (免責聲明:我是作者)。

為任何 flutter 應用程序創建管理面板的想法

這個想法是針對兩個具有不同名稱的應用程序,它們將通過 Firebase 相互鏈接

有關更多詳細信息,請參閱鏈接https://youtu.be/d7qoff-I8BU中的視頻

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM