2015-04-24 28 views
0

我需要一些python和firebase的指導。我正在嘗試制定一些身份驗證規則,但我碰到了一個粗糙的路徑。Python Firebase - 用戶認證?

我正在建立一個數據庫,該數據庫應該允許主管人員查看他們負責人的信息,並且我想限制訪問權限,以便他們只能看到關於具有其姓名的人員的信息主管。這裏是例子其次代碼:

名1:約翰·保羅· - 年齡:34 - :IT - 主管:彼得·

名2:史蒂夫丹 - 年齡:40 - 部門:出售 - 主管:邁克P.

我想邁克P.能夠檢查只是姓名(或名稱)有外地主管麥克P.

這是我有這麼遠在火力規則:

{ 
"rules": { 
    "people":{ 
    "$supervisor":{ 
    ".read":"data.child($supervisor).child('Supervisor').val() === auth.super_name" 
}}}} 

但它不工作:史蒂夫丹)並消除變量$監:'( ,如果我用一個確切的名稱(例如它纔會起作用。

我會感謝任何幫助,提示,技巧,任何事情。


編輯:

enter image description here

+0

請添加您的'人'結構的示例片段。 –

+0

@FrankvanPuffelen我剛剛添加了您需要的信息 – evaldez89

+1

用於以文本格式從Firebase獲取JSON的方便片段(數據結構的屏幕截圖類似於代碼截圖):'new Firebase('https://mine.firebaseio。 ('value',function(s){console.log(JSON.stringify(s.val()));},function(e){console.error(e);})'Having它在文本中也使您更容易清理數據。 :-) –

回答

2

如果刪除.child($supervisor)你的安全規則應該工作。所以:

{ 
"rules": { 
    "people":{ 
    "$supervisor":{ 
    ".read":"data.child('Supervisor').val() === auth.super_name" 
}}}} 

但是,它要求super_name被設置爲驗證的一部分。你是否這樣做?

您可以先嚐試使用Firebase儀表板上的模擬器測試您的安全規則(https://YourFirebase.firebaseio.com/?page=Simulator)。通過這種方式,您可以確定問題出在您的規則還是您的Python代碼中。您的'自定義身份驗證'字段將爲{ super_name: "Mike P." }

安全規則中$supervisor的命名有些令人驚訝。這不是$person,因爲它是一個人的名單?

+0

是'super_name'被設置爲auth的一部分。 關於安全規則中的'$ supervisor',我只是想盡一切辦法想想:p。 我會檢查模擬器並讓你知道 – evaldez89

1

嗯,感謝@Marein和@FrankvanPuffelen的幫助,我設法讓它工作。模擬器的方式非常有幫助。

這是我做過什麼:

我的火力認證auth = firebase.FirebaseAuthentication(mySecret, None, extra = {'super_name':'Mike P.'})

我的規則:

{ 
"rules": { 
    "workers":{ 
     "$gender":{ 
     "$worker":{ 
      ".read":"data.child('supervisor').val() === auth.super_name" } 
     }}}} 

現在,當 「邁克P.」輸入他的名字(後來又輸入一個密碼,不知道該怎麼做),他只能被允許看到主管是他自己的工人的信息。