2013-04-25 6 views
5

Ich weiß, dass CouchDB es Nicht-Admin-Benutzern nicht erlaubt, Design-Dokumente zu bearbeiten/zu löschen, aber wie verhindere ich, dass sie alle Dokumente bearbeiten/löschen?Wie verhindere ich, dass anonyme Benutzer meine Dokumente in couchDB löschen/bearbeiten?

Die einzige Information, die ich finden konnte, ist, dass Benutzerberechtigungen mit Überprüfungsfunktionen eingestellt werden können. Ich bin etwas verwirrt darüber, wie ich eine Validierungsfunktion schreiben würde, um dies zu tun/wo Validierungsfunktionen leben. Sind sie alle in der _users DB?

Dank

Antwort

4

Es ist ein einfach: Design-Dokument mit validate_doc_update Funktion in der Datenbank erstellen, in dem Sie Dokumente steuern mögen, dass so etwas wie dies funktioniert:

function(newDoc, oldDoc, userCtx, secObj){ 
    if('_admin' in userCtx.roles) return; // skip anonymous in Admin Party case; 
    if(!userCtx.name && newDoc._deleted){ 
     throw({'forbidden': 'auth first before delete something'}); 
    } 
} 

Die Idee ist einfach: Wenn userCtx kein Name angegeben ist, bedeutet dies, dass der Benutzer anonym ist und wenn in unserer neuen Dokumentversion das spezielle Feld _deleted als true festgelegt ist - Dokument wird gelöscht (Änderungen werden jedoch noch nicht auf der Festplatte gespeichert). Also prüfen wir diese Felder und werfen eine verbotene Ausnahme, wenn die Bedingung erfüllt ist. Wir machen auch eine Ausnahme für Admin Party Fall gibt es alle namenlos, aber hat _admin Rolle, also müssen wir sie überspringen. Und jetzt auf jeden Versuch, regelmäßige Dokument durch anonyme Benutzer löschen er nächste HTTP-Antwort erhalten:

HTTP/1.1 403 Forbidden 
Server: CouchDB/1.3.0 (Erlang OTP/R15B03) 
Date: Thu, 25 Apr 2013 18:48:51 GMT 
Content-Type: application/json 
Content-Length: 68 
Cache-Control: must-revalidate 

{"error":"forbidden","reason":"auth first before delete something"} 
+0

Vielen Dank! Sehr hilfreiche Antwort! –

6

Eine andere Möglichkeit, den Zugriff auf Ihre Datenbank zu beschränken ist die [couch_httpd_auth] mit require_valid_user:true

Dann muss jede Anforderung konfigurieren senden Anmeldeinformationen für die Anmeldung bei Ihrer couchdb.

+2

Für meinen Anwendungsfall ist dies viel einfacher und effektiver als die akzeptierte Antwort. Mein Ziel war es, ** alle ** anonymen Zugriffe zu blockieren, nicht nur bestimmte Aktionen gegen bestimmte Dokumente. Diese Antwort macht das. – aroth

Verwandte Themen