雲開發的數據庫權限機制解讀丨雲開發101

在使用雲開發進行開發時,數據庫權限是一個讓不少人困擾的部分,四種數據庫權限,到底是什麼意思?其各自的權限、應用場景都是什麼?大多數人對於這個機制,還是模糊的。爲了幫助大家進行更好的開發,在涉及到具體的代碼之前,我們先來了解一下雲開發的數據庫權限機制。

一、爲什麼會有權限系統?

雲開發和其他常見的開發模式有一處很大的不同就是,其數據庫是可以在小程序端直接進行查詢,而無需通過服務端提供的特定 API 接口來完成數據查詢。這樣就會出現一個問題,這個數據到底誰能查?誰不能查?能查到數據的人,能修改數據麼?

在傳統的應用開發模式中,權限的控制由服務端的後端接口完成,但是,在雲開發的模式中,已經不存在傳統的後端,因此,我們需要將權限控制進行向前移,但前端的代碼因爲無法保證安全(前端的數據可能被篡改,不可信),因此,我們需要將權限控制放在一個更加安全的地方,在經過多方權衡後,最終,雲開發數據庫就變成了雲開發控制檯中的一個選項。

二、雲開發權限系統中的環境與角色

在雲開發的權限中,我們會看到一些詞,比如創建者所有人管理端,這些詞應該如何理解呢?

其實這裏在命名上是有一些問題的,管理端和創建者、所有人並不是一個好的對比,如果將管理端更名爲管理員,會更容易理解。

從權限的層面上來看,從管理端到創建者再到所有人,權限是依次收緊的。

管理端,或者叫管理員,其實便是指雲開發中的雲函數環境的執行權限。因爲是在雲函數中執行,安全係數較高,因而獲得了最高的權限,也就是所謂的管理端權限。這個權限包括了對於所有的數據進行增、刪、改、查的能力。

創建者,則指的是創建某條數據的用戶,一般來說,是指在小程序端創建數據的用戶。數據和用戶之間的綁定是基於數據中的 _openid 來實現的,程序在執行中,當前用戶的 openid 與數據的_openid一致時,就認爲這個用戶是數據的創建者。

所有人,指的是除了管理員以外的用戶,這個用戶一般而言,也是指小程序端的用戶。數據和用戶之間並不具備直接的關聯關係。用戶僅能通過數據庫權限配置後的開放讀取到用戶。

三、關於四個不同的權限

雲開發的數據庫權限共四種,分別是:
1. 僅創建者可寫,所有人可讀
2. 僅創建者可讀寫
3. 僅管理端可寫,其他人可讀
4. 僅管理端可讀寫

這四種權限各自對應着不同的場景,接下來,我們借一些例子,來看一看四種權限的不同應用場景。

僅創建者可寫,所有人可讀

這種權限是我們使用最多的權限,特別是一些涉及到UGC的場景,我們一定會需要這個權限,因爲我們的需求是產生的內容所有人均可讀,寫的層面則允許數據的創建者可寫。

舉個例子,如果你做了一個類似朋友圈的應用,那麼你一定希望你的用戶發的朋友圈可以被其他用戶看到,但不能被其他用戶修改,不然就亂套了。

僅創建者可讀寫

這種權限一般應用在一些用戶的個人隱私信息的場景中。這些信息希望用戶自己可以讀取,但其他用戶無法讀取,此時,我們便需要僅創建者可讀寫。

舉個例子,如果你做了個人相冊的功能,那麼你一定希望這個相冊是隻有你自己能看,而不是被所有人可以看到,因此,你需要選擇僅創建者可讀寫,而不是僅創建者可寫,所有人可讀。

僅管理端可寫,其他人可讀

如果描述這個權限的特性,那麼就是管理員可以修改,其他人只能看。最適合的場景莫過於各種需要由開發者、平臺方管控的東西,比如新聞應用的輪播圖列表、商城首頁的活動信息等等。這些數據的關鍵在於所有人都可以看到,同時,所有人也只能看到,不能修改,只能有管理員修改。

舉個例子,如果你做了一個電商小程序,那麼在你的小程序中,你一定希望首頁的推廣 Banner 由你自己控制,而不是由用戶自行控制,基於這樣的考慮,你就需要僅管理端可寫,其他人可讀的權限。

僅管理端可讀寫

僅管理端可讀寫,你可以理解爲只有雲函數中有資格獲取這個數據,其他的環境均不允許。這個權限在某些特定的場景下非常有用,舉個例子,你的小程序的一些運行日誌,你希望在雲端可以查看,同時,這個日誌不對普通用戶展現,這個時候就可以設置爲僅管理端可讀寫。

舉個例子,如果你做了一個電商小程序,那麼內部的統計數據就需要設置爲僅管理端可讀寫,這樣可以確保你的運營數據不會被普通用戶所讀取,儘可能避免信息的泄露。

四、常見問題

爲什麼沒有所有人可讀寫的權限?

所有人可讀寫的數據庫應用場景並不多見,而且大多數時候、可以通過管理端完成繞過。不過,如果你真的有了這樣的場景,不妨思考一下,你的需求到底是什麼?是不是因爲你的數據庫結構的不合理導致的需要所有人可讀寫?

所有人可讀寫數據會造成非常多的問題,比如數據原子化、數據鎖等問題,因此,在你實現數據所有人可讀寫時,一定要考慮場景。

能不能實現更加細粒度的權限控制呢?

當然是可以的,實際上,雲開發的數據庫中每一條由小程序段完成添加的數據都有一個字段 _openid,我們在進行數據庫查詢時,系統會自動替我們完成這個字段的對比,如果對比不上,再去查詢對應集合的權限控制,看是否給予了非創建者可讀寫的權限。

你自己在實現時,可以在數據創建時,根據業務需求,在數據中加入對應的字段,然後數據查詢時,基於字段中的條件進行對比。

如果你對於雲開發有任何問題,都歡迎你在文章留言出留下你的疑問,我們將一一解答。

如果你有關於使用雲開發CloudBase相關的技術故事/技術實戰經驗想要跟大家分享,歡迎留言聯繫我們哦~比心!

圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章