这是数据库结构。
这是数据库规则:
{
"rules": {
".read": true,
"shops-product-list": {
"$uid": {
// grants write access to the owner of this user account whose uid must exactly match the key ($uid)
".write": "auth !== null && auth.uid === $uid",
}
}
}
}
商店 - 产品列表的键是登录用户的uid(忽略第一个键,即-1)
记录用户尝试使用此逻辑写入新数据。
private void addShopVariant(String pid, String vid, String mrp, String sellPrice) {
// Create new post at /user-posts/$userid/$postid and at
// /posts/$postid simultaneously
final String uid = getUid();
String key = pid + "_" + vid;
//String key = databaseReference.child("shops-product-list").child(uid).push().getKey();
ShopProductVariant shopProductVariant = new ShopProductVariant(pid, vid, mrp, sellPrice);
Map<String, Object> shopProductVariantValues = shopProductVariant.toMap();
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put("/shops-product-list/" + uid + "/"+ key, shopProductVariantValues);
//childUpdates.put("/user-posts/" + userId + "/" + key, postValues);
databaseReference.updateChildren(childUpdates);
}
如果设置规则,函数可以正常工作。
{
"rules": {
".read": true,
".write": true
}
}
但我希望只有登录用户应该能够写出,这也只是他们自己的数据。
上面的火力规则有什么问题?
答案 0 :(得分:0)
我认为你的规则是错误的设置:
应该如下:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
请注意它的语法!= not!==
编辑: 而不是在服务器上验证这一点,你可以这样做:
scoresRef.child("the user id").setValue("your value", withCompletionBlock: { (error:NSError?, snapshot:FIRDatabaseReference) in
})
这样你就不必在规则中这样做了