2012-05-15 35 views
11

Tôi muốn triển khai webapp - nguồn cấp dữ liệu tích hợp dữ liệu từ nhiều nguồn khác nhau và hiển thị chúng cho người dùng. Người dùng chỉ có thể xem các mục nguồn cấp dữ liệu mà anh ta có quyền đọc (ví dụ: vì chúng thuộc về một dự án mà anh ấy là thành viên). Tuy nhiên, một mục nguồn cấp dữ liệu có thể (và sẽ) được hiển thị bởi nhiều người dùng.Phương pháp tiếp cận cơ sở dữ liệu người dùng CouchDB có khả thi cho người dùng có nhiều dữ liệu được chia sẻ không?

Tôi thực sự muốn sử dụng CouchDB (chủ yếu là do nguồn cấp dữ liệu _changes tuyệt vời và chế độ xem bản đồ/giảm). Tôi đã suy nghĩ về việc triển khai ứng dụng như một chiếc ghế sofa tinh khiết, nhưng tôi đang gặp sự cố với mô hình quyền. AFAIK, không có quyền cho mỗi tài liệu trong CouchDB và điều này thường được thực hiện bằng cách sử dụng cơ sở dữ liệu cho mỗi người dùng và nhân rộng.

Nhưng khi có nhiều trùng lặp giữa những gì người dùng khác nhau thấy, điều đó sẽ giới thiệu rất nhiều chi phí ... công cụ sẽ được nhân rộng khắp nơi và sao chép trong nhiều cơ sở dữ liệu. Tôi thích sự thanh lịch của cách tiếp cận này, nhưng chi phí khổng lồ chỉ cảm thấy giống như một người giao dịch ... (Giả sử tôi có 50 người dùng và tất cả họ đều thấy cùng một dữ liệu ...).

Bất kỳ ý tưởng nào về cách đó, vui lòng? Giải pháp thay thế?

Trả lời

7

Bạn có thể thực thi quyền đọc như được mô tả trong CouchDB Authorization on a Per-Database Basis.

Để có quyền ghi, bạn có thể sử dụng các chức năng xác thực như được mô tả trên CouchDB The Definitive Guide - Security.

Bạn có thể tạo cơ sở dữ liệu cho từng dự án và thực thi quyền ở đó, sau đó tất cả dữ liệu được chia sẻ hiệu quả giữa người dùng. Nếu người dùng tự chia sẻ nguồn cấp dữ liệu và cần quyền trên đó, bạn có thể biến người dùng thành "dự án" để logic tương tự áp dụng ở mọi nơi.

Sử dụng thiết kế này, bạn có thể ủy quyền cho người dùng hoặc nhóm người dùng (vai trò) cho từng dự án.

+0

Rất tiếc, mô hình quyền cho mỗi dự án không đủ chi tiết cho nhu cầu của tôi (tôi cần một số người dùng chỉ xem một số mục thuộc về một dự án nhất định). –

4

Ngoài (như victorsavu3 đã đề xuất rồi) xử lý xác thực đọc của bạn trong proxy giữa ứng dụng và đi văng, chỉ có hai lựa chọn thay thế khác mà tôi có thể nghĩ đến. Đầu tiên là chỉ cần không quan tâm, đĩa là rẻ và có nhiều bản sao của dữ liệu có vẻ như rất nhiều bản sao không cần thiết, nhưng nó đơn giản hóa rất nhiều kiến ​​trúc của bạn và bạn nhận được một số lợi ích tự động như dễ dàng mở rộng quy mô để xử lý tải (bằng cách di chuyển một số DB của người dùng của bạn sang các máy chủ khác).

Thứ hai là chia dữ liệu được chia thành một DB khác. Điều này đôi khi sẽ hạn chế những điều bạn có thể làm trong các khung nhìn (ví dụ: không có "Tài liệu được liên kết") nhưng đây không phải là vấn đề lớn trong nhiều trường hợp.

+1

Dung lượng ổ đĩa rẻ - vâng, nhưng trong trường hợp của tôi, điều này cuối cùng sẽ dẫn đến * rất nhiều không gian đĩa được sử dụng nên tôi quyết định không đi xuống con đường này. Tách DB - Tôi cũng nghĩ về điều đó ... nhưng tôi tin rằng điều này sẽ làm cho phương pháp này phức tạp hơn việc chạy một máy chủ mỏng trên CouchDB xử lý xác thực. –

+0

Vâng, đó là một giải pháp tốt quá. – smathy

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