2017-07-21 2 views
0

Ich habe Daten in Feuerbasis in folgendem Format -Firebase Sicherheitsregel

"requests" : { 
    "-KpPjt5jQZHBalQRxKSK" : { 
     "email" : "[email protected]", 
     "itemId" : "-KmazkKp5wavdHOczlDS", 
     "quantity" : 1, 
     "status" : "new" 
    }, 
    "-KpZsw3KHE9oD1CIFQ4R" : { 
     "email" : "[email protected]", 
     "itemId" : "-Kmb-ZXfao7VdfenhfYj", 
     "quantity" : 1, 
     "status" : "new" 
    } 
    } 

Jede Anfrage enthält

"email" <- user's email id who has initiated the request. 
"itemId" <- id of requested item 
"quantity" <- item quantity 
"status" <- "new" | "approved" | decline. 

I Firebase Regel zu schreiben, haben Schwierigkeiten, die würden:

  • authentifizierten ermöglichen Benutzer, um auf Anfragen zuzugreifen/zu lesen, die von ihm/ihr erhoben werden.
  • erlauben Admin Benutzer alle Anfragen zu lesen/zu aktualisieren.

Meine aktuelle Regel lautet wie folgt:

{ 
    "rules": { 
    ".read": false, 
    ".write": false, 
    "items" : { 
    ".read": "auth != null", 
    ".write": "root.child('roles').child(auth.uid).val() === 'admin'" 
    }, 
    "requests": { 
     ".write": "root.child('roles').child(auth.uid).val() === 'admin'", /*Only Admins can update request*/ 
     "$rId": { 
      ".read": "data.child('email').val() == auth.email || root.child('roles').child(auth.uid).val() === 'admin'"/*Request owner and admin can only read the particular request*/ 
     } 
    } 
    } 
} 

Ich habe separate Knoten Rollen aufrechterhalten, die hat { "uid": "Rolle" }

ich AngularFire2 bin mit abfragen Firebase in meiner App.

Beispielcode zum Abrufen Anforderungen mit bestimmten Status wie unten

const queryList$ = this.db.list('/requests', { 
    query: { 
     orderByChild: 'status', 
     equalTo: status 
    } 
}) 

Dank Pari

+0

Viel hängt davon ab, wie Sie das Konzept der * Admin-Benutzer implementieren *. Bitte bearbeiten Sie Ihre Frage so, dass sie zwei Code-Snippets enthält: 1) den minimalen Code für eine Operation, die erlaubt sein sollte, 2) den minimalen Code für eine Operation, die nicht erlaubt sein sollte. Es wäre auch gut, Ihre vorhandenen (minimalen) Sicherheitsregeln für die Anfragen zu sehen. –

+0

Danke. Ich habe meine bestehenden Sicherheitsregeln hinzugefügt. –

Antwort

2

Ich schlage vor, Sie folgende Änderungen vornehmen:

In der Wurzel der Datenbank ein neues Objekt erstellen admins

"admins": { 
    "<ADMIN_1_UID>": "true", 
    "<ADMIN_2_UID>": "true" 
} 

Dann Änderungen vornehmen, um Ihre Sicherheitsregeln wie folgt aus:

"rules": { 
    "admins": { 
     ".read": false, 
     ".write": false /*This ensures that only from firebase console you can add data to this object*/ 
    }, 
    "requests": { 
     ".read": "root.child('admins').child(auth.uid).val()", 
     ".write": "root.child('admins').child(auth.uid).val()", /*Only Admins can read/update all requests*/ 
     "$rId": { 
      ".read": "data.child('email').val() == auth.email"/*Request owner can read only the particular request*/ 
     } 
    } 
} 
+0

Ich habe die Sicherheitsregeln in der ursprünglichen Post aktualisiert, wie in Ihren Vorschlägen jetzt angezeigt. Admin kann schreiben, aber lesen funktioniert nicht, sowohl der Administrator als auch der Anforderungseigner erhalten die Berechtigung verweigert. irgendwelche Gedanken? –

+0

Sicherheitsregeln funktionieren, wenn ich versuche, einzelne Anfrage zu lesen, d. H./Requests/req-id, aber nicht, wenn ich versuche,/Anfragen abzurufen. In diesem Fall wie hole ich alle Anfragen, wenn ich Admin-Benutzer bin und Teilmenge von Anfragen (eigene Anfragen) holen, wenn ich ein normaler Benutzer bin. Vielen Dank für deine Hilfe. –

+0

Ich werde dann meine Antwort nach Ihren Bedürfnissen bearbeiten. –

Verwandte Themen