2016-08-06 3 views
0

ich Anfang bin am überlegen RestHeart verwenden, jedoch habe ich keine befriedigende Antwort beim Surfen rund um für die folgende Frage gefunden:Wie das Ergebnis zu json docs zu einem bestimmten Benutzer gehört beschränken

In einer Sammlung gibt es ein Attribut Benennung des Eigentümers des Dokuments (_id des Benutzers). Wie kann ich bei einem authentifizierten Benutzer das Ergebnis auf Dokumente beschränken, die zu diesem Benutzer gehören, auch wenn der Benutzer versucht, die REST-Abfrage durch Ändern der userId zu manipulieren?

AFAIU die Lösung wäre, eine benutzerdefinierte AccessManager-Klasse zu verwenden. Also, meine Nachfolgefrage ist; Wenn jemand bereits etwas Ähnliches implementiert hat und den Code teilen möchte?

Antwort

1

Ein benutzerdefinierter AccessManager funktioniert, aber auch der standardmäßige SimpleAccessManager kann dies durch Überprüfen des Abfrageparameters filter erreichen.

Die Idee ist mit der Client anfordert:

GET /db/coll?filter={'userid': <the userid>} 

Die SimpleAccessManager können nun die Filterbedingung überprüfen, um tatsächlich den authentifizierten Benutzer-ID mit dem folgenden Prädikat zu verwenden:

- role: ROLE 
    predicate: path-template[value="/db/coll"] and equals[%{q,filter},"{'userid':'%u'}"] and method[value="GET"] 

Der Trick getan wird durch das folgende equals Prädikat, das den Filterabfrageparameter prüft, um gleich der Zeichenkette {'userid': <authenticated_user_id>}

zu sein
equals[%{q,filter},"{'userid':'%u'}"] 
+0

Danke Andrea. Ich werde es versuchen. BTW, bitte aktualisieren Sie die Dokumente mit Ihrem Rat. Ich denke, andere könnten auch daran interessiert sein, weil es ein ziemlich häufiger Anwendungsfall ist. –

Verwandte Themen