1

我有以下的數據庫條目:「公司:8」: enter image description here火力地堡規則允許寫的時候,他們不應該

我有以下的數據庫規則,不容許「公司的模擬寫: 8「到數據庫。

{ 
    "rules": { 
     ".read": "auth != null", 
     ".write": "auth != null", 
     "companies": { 
       ".validate": "(data.exists() && (newData.val() === data.val() + 1)) || (!data.exists() && newData.val() == 0)" 
     } 
    } 
} 

enter image description here

然而,當我嘗試寫 「公司:20」 與火力地堡的Python SDK,也沒有根據本規則允許的數據庫,它的工作原理:

In [1]: import firebase_admin 

In [2]: from firebase_admin import credentials, db 

In [3]: cred = credentials.Certificate('serviceAccountCredentials_dev_async.json 
    ...: ') 

In [4]: firebase_admin.initialize_app(cred, {'databaseURL': 'https://async-testi 
    ...: ng.firebaseio.com/'}) 
Out[4]: <firebase_admin.App at 0x7fc50c00c080> 

In [5]: ref = db.reference() 

In [6]: ref.update({'companies': 20}) 

我做錯了什麼?

回答

2

您正在使用Firebase Admin SDK,它看起來像是initializing with the credentials for a service account。在這種情況下,沒有應用安全規則,我認爲甚至沒有驗證規則。

如果有一個理由則必須在管理SDK,並希望進行驗證規則,authenticate with limited priveleges

最佳做法是,一個服務應該只能訪問的資源 需要。要更好地控制Firebase應用實例可以訪問的資源,請在您的安全規則中使用唯一標識符來表示您的服務。然後設置合適的 規則,以便您的服務訪問其所需的資源。

+0

很好的鮑勃! –