2015-08-28 33 views
0

我对Firebase安全规则感到困惑 - 关于从上而下的工作作为文档。如何允许只允许1个值使用Firebase安全规则编写

所以我有这样的规则:

"rules": { 
    "taskUsers": { 
     ".read": "auth != null", 
     "$uid": { 
     ".read": "auth != null", 
     ".write": "auth != null && auth.uid == $uid", 
     }, 
    }, 
    } 

因此,所有的用户数据只能通过谁创造了他们auth.uid的B/C == $ UID用户更新。但是在firebasepath/taskUsers/$ uid下,我有一个名为notification的值,我希望其他用户能够编写它。就像在聊天通知系统中一样 - 当其他用户联系该用户时,“其他用户”可以更改/写入价值通知(如+1)。但有了上述规则,“其他用户”在发布联系人时,会返回拒绝的权限。所以,如果我不喜欢

"rules": { 
    "taskUsers": { 
     ".read": "auth != null", 
     "$uid": { 
     ".read": "auth != null", 
     ".write": "auth != null && auth.uid == $uid", 
     "notification": { 
     ".write": "auth != null", 
     }, 
     }, 
    }, 
} 

的规则的规则他被忽视了......所以,我怎么可以创建一个规则只允许taskUsers/$ UID下通知值由大家谁登录写?

回答

1

我还没有测试过,但至少应该指出你在正确的方向。他们的规则有点棘手......我仍然认为应该在Firebase前面有一个WebService来处理任何数据。如何才能实现非平凡的业务逻辑?

"rules": { 
    "taskUsers": { 
     ".read": "auth != null", 
     "$uid": { 
     // authenticated users can write as long as they have a notification property 
     ".write": "auth != null && (auth.uid == $uid || newData.hasChild('notification'))", 
     "notification": { 
     // Bonus rule: only increment the number by 1 or -1 
      ".validate": "newData.isNumber() && ((!data.exists() && newData.val() === 1 || newData.val() === -1) || newData.val() === data.val()+1 || newData.val() === data.val()-1)", 
     } 
     }, 
    }, 
} 
+0

谢谢!这工作熟练!逻辑是指当前用户是创建者还是“更新”数据具有属性“通知”? –

+0

没问题。这正是它的意思。 –