E 'un semplice: basta creare documenti di progettazione con validate_doc_update
funzione nel database in cui si desidera controllare i documenti che fa qualcosa di simile:
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'});
}
}
L'idea è semplice: se userCtx
non ha nome specificato questo significa che l'utente è anonimo e se la nostra nuova versione del documento ha campo speciale _deleted
set come true
- documento sta per essere cancellato (ma le modifiche non salvate su disco ancora). Quindi controlliamo questi campi e lanciamo un'eccezione vietata se la condizione è soddisfatta. Stiamo anche fare un'eccezione per il caso del partito Admin c'è tutti senza nome, ma ha _admin
ruolo, quindi abbiamo bisogno di saltare loro. E d'ora in poi ogni tentativo di cancellare i documenti regolari da utenti anonimi che riceverà il prossimo risposta HTTP:
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"}
Grazie! Risposta molto utile! –