2013-07-22 23 views
5

Hiện tại tôi có một ứng dụng cần làm đơn giản nhờ đó người dùng có thể tạo danh sách rồi đánh dấu các mục là xong. Dữ liệu được cấu trúc như sau: '/ acc_' + USER_ID + '/ done' và '/ acc_' + USER_ID + '/ todo'. Khi các mục được "thực hiện", chúng được chuyển đến danh sách đã thực hiện.Cách cấu trúc dữ liệu Firebase và quy tắc chia sẻ dữ liệu giữa người dùng?

Điều tôi muốn là để người dùng có thể chia sẻ danh sách với người dùng được xác thực khác.

Quy tắc hiện tại trông giống như các quy tắc sau có vẻ hoạt động.

{ 
    "rules": { 
     "$userPath": { 
      ".read": "auth != null", 
      ".write": "auth != null", 
      ".validate": "$userPath === 'acc_' + auth.id" 
     } 
    } 
} 

Điều tôi nghĩ tôi cần làm là yêu cầu mỗi người dùng có một loạt các địa chỉ email được chấp thuận bằng cách nào đó đã gắn kết đó vào các quy tắc bảo mật.

Hoặc tôi có thể tạo danh sách trong thư mục gốc và chỉ người tạo và người dùng được chia sẻ truy cập danh sách đó.

Bất kỳ hướng dẫn nào?

Trả lời

1

Vì người dùng quyết định họ muốn chia sẻ danh sách với ai, tôi sẽ lưu trữ thông tin đó trong chính dữ liệu người dùng. Ví dụ:

{ 
    "rules": { 
    "$userPath": { 
     ".write": "$userPath == 'acc_' + auth.id", 
     ".read": "$userPath == 'acc_' + auth.id || root.child($userPath).child('shared').hasChild(auth.id)" 
    } 
    } 
} 

Và sau đó lưu trữ các danh sách người dùng dữ liệu được chia sẻ với trong acc_userid/shared/

+0

Tôi không có nhiều may mắn với các quy tắc trên. Điều này sau đây xuất hiện để làm việc mặc dù với 'acc_' + auth.id '/ chia sẻ' là một mảng mà mục đầu tiên là một trong những tôi muốn có quyền truy cập. Mặc dù, trong nhận thức muộn màng, điều này dường như không phải là một giải pháp tuyệt vời. Tôi nghĩ rằng vấn đề của tôi với kiến ​​trúc của ứng dụng rất sâu. { "quy tắc": { "$ userPath": { ".write": "$ userPath == 'acc_' + auth.id || root.child ($ userPath) .child ('shared'). con ('0'). val() == auth.email ", " .read ":" $ userPath == 'acc_' + auth.id || root.child ($ userPath) .child ('được chia sẻ' val. ("0"). val() == auth.email " } } } – defmech

+0

vì vậy bạn có tìm được giải pháp tốt nào không? – jujule