2013-10-04 157 views
2

如何設置我的安全規則,以便只有具有users/$provider/$user/admin == true的用戶才能添加和刪除新的管理員。管理員用戶的安全規則

這裏是我的火力地堡規則:

{ 
    "rules": {  
    "users": { 
     "$provider": { 
     "$user": { 
      "profile": { 
      ".read": "$user == auth.id && $provider == auth.provider", 
      ".write": "$user == auth.id && $provider == auth.provider" 
      }, 
      "admin": { 
      ".read": false, 
      ".write": false 
      } 
     } 
     } 
    }, 
    "blogs": { 
     ".read": true, 
     ".write": "root.child('users').child(auth.provider).child(auth.id).child('admin').val() == true", 
     "$blog": { 
     ".validate": "newData.hasChildren(['article', 'time', 'title'])" 
     } 
    } 
    } 
} 

我的另一個問題是,我可以從不同的auth.provider混合auth.id,他們是獨一無二的?我想將"$provider": {}放在用戶層次結構中,它有點難看。

+0

我們有即將推出的功能,可以幫助提供跨所有提供商的唯一ID。如果你有時間,請發送電子郵件至[email protected] - 我們很樂意提供一些反饋! –

回答

3

我希望我理解正確的話,你需要什麼:

{ 
    "rules": {  
    "users": { 
    "$provider": { 
     "$user": { 
     "profile": { 
      ".read": "$user == auth.id && $provider == auth.provider", 
      ".write": "$user == auth.id && $provider == auth.provider" 
     }, 
     "admin": { 
      ".read": "auth.admin == true", 
      ".write": "auth.admin == true" 
     } 
     } 
    } 
    }, 
    "blogs": { 
    ".read": true, 
    ".write": "root.child('users').child(auth.provider).child(auth.id).child('admin').val() == true", 
    "$blog": { 
     ".validate": "newData.hasChildren(['article', 'time', 'title'])" 
    } 
    } 
    } 
} 

關於第二個問題,我不認爲你需要保存供應商在所有的,因爲如果在不同的供應商,應該被視爲一個用戶loggs一個新用戶,除非Firebase確實記錄唯一的東西,這是電子郵件登錄中唯一和持久的東西,我非常懷疑他們這麼做。我99%確定的是,auth.id在auth提供商切換時會發生變化,但這根本不難測試嗎?

0

雖然id屬性是指定供應商的標識,uid在所有供應商唯一的,旨在爲用戶適當的指數,特別是如果你使用多個供應商的一次。

注:火力地堡更新了他們的API來在安全規則auth變量不再返回平原,提供程序特定的屬性id客戶端庫版本1.1.0或更高版本(發佈2014年10月3日)。