2013-04-25 51 views
5

Tôi biết rằng CouchDB không cho phép người dùng không quản trị chỉnh sửa/xóa tài liệu thiết kế, nhưng làm cách nào để ngăn họ chỉnh sửa/xóa tất cả tài liệu?Làm cách nào để ngăn người dùng ẩn danh xóa/chỉnh sửa tài liệu của tôi trong couchDB?

Thông tin duy nhất tôi có thể tìm thấy là quyền người dùng có thể được đặt bằng chức năng xác thực. Tôi là một chút bối rối về cách tôi sẽ viết một chức năng xác nhận để làm điều này/nơi chức năng xác nhận trực tiếp. Có phải tất cả họ đều nằm trong DB của DB không?

Cảm ơn

Trả lời

4

Đó 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"} 
+0

Cảm ơn bạn! Câu trả lời rất hữu ích! –

6

Một cách khác để hạn chế quyền truy cập vào cơ sở dữ liệu của bạn là để cấu hình [couch_httpd_auth] với require_valid_user:true

Sau đó, mọi yêu cầu phải gửi thông tin đăng nhập để đăng nhập vào couchdb của bạn.

+2

Đối với trường hợp sử dụng của tôi, điều này đơn giản và hiệu quả hơn nhiều so với câu trả lời được chấp nhận. Mục tiêu của tôi đã chặn ** tất cả ** quyền truy cập ẩn danh, không chỉ các hành động cụ thể đối với các tài liệu cụ thể. Câu trả lời này làm điều đó. – aroth

Các vấn đề liên quan