Đó là một cách dễ dàng: chỉ cần tạo tài liệu thiết kế với validate_doc_update
chức năng trong cơ sở dữ liệu mà bạn muốn kiểm soát tài liệu mà làm điều gì đó như thế này:
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'});
}
}
Ý tưởng rất đơn giản: nếu userCtx
không có tên được chỉ định, điều này có nghĩa là người dùng ẩn danh và nếu phiên bản tài liệu mới của chúng tôi có trường đặc biệt _deleted
đặt làm true
- tài liệu sẽ bị xóa (nhưng thay đổi chưa được lưu trên đĩa). Vì vậy, chúng tôi kiểm tra các trường này và ném một ngoại lệ bị cấm nếu điều kiện được thỏa mãn. Chúng tôi cũng thực hiện một ngoại lệ cho trường hợp bên quản trị có tất cả mọi người không tên, nhưng có vai trò _admin
, vì vậy chúng tôi cần phải bỏ qua chúng. Và bây giờ trên bất kỳ nỗ lực để xóa hồ sơ hợp lệ của thành viên ẩn danh ông sẽ nhận được sau phản ứng 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"}
Cảm ơn bạn! Câu trả lời rất hữu ích! –