2013-10-04 123 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日)。