firebase / firebase/geofire-objc

Default firebase geofire rules not allowing writes.

Open
#135 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Objective-C
Stars
447
Forks
183
PR merge metrics
No merged PRs in 30d

Description

I am trying to setup default GeoFire Rules on Firebase. When I turn on the rules below on the "geo" key I am getting "Permission Denied" in Xcode (SwiftUI). But other areas in firebase are getting written to. It's just geoFire that is getting denied. I want any Authed user to read/write to the entire firebase.

The "key" is an firebase random Key generator.

`let firebaseStoreRef = storeRef.childByAutoId()`

This link is where I am getting the default GeoFire rules (https://github.com/firebase/geofire-js/blob/master/examples/securityRules/authenticated.rules.json)

Here is my JASON structure when I turned off the rules or set the rules to just auth.

```
{
"geo" : {
"-MAsyzawTChafkDQAzpx" : {
"g" : "9r4bb5f5h6",
"l" : [ 39.52796273493379, -119.8798737645459 ]
},
"-MAtFpjYsSLA0jJ4-5Le" : {
"g" : "9r4bbk77v5",
"l" : [ 39.5308423, -119.8671408 ]
}
}
}
```
Here are the rules that I set up in firebase. And yes, the user is authed, and I am able to write to other areas of the firebase just fine.

```
{
/* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */
"rules": {
"geo": {
// Allow anyone to read the GeoFire index
".read": true,

// Index each location's geohash for faster querying
".indexOn": ["g"],

// Schema validation
"$key": {
// Allow any authentication user to add, update, or remove keys in the GeoFire index
".write": "auth !== null",

// Key validation
".validate": "newData.hasChildren(['g', 'l']) && newData.getPriority().length <= 22 && newData.getPriority().length > 0",

// Geohash validation
"g": {
".validate": "newData.val() == newData.parent().getPriority()"
},

// Location coordinates validation
"l": {
"0" : {
".validate": "newData.isNumber() && newData.val() >= -90 && newData.val() <= 90"
},
"1" : {
".validate": "newData.isNumber() && newData.val() >= -180 && newData.val() <= 180"
},
"$other": {
".validate": false
}
},

// Don't allow any other keys to be written
"$other": {
".validate": false
}
}
},
".read": "auth != null",
".write": "auth != null"
}
}
```
If I comment out the following areas I am able to write to the "geo" part of the firebase...

```
// Key validation
// Geohash validation
// Don't allow any other keys to be written
```

Thanks in advance.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.