2013-02-26 26 views
11

Trong ứng dụng của tôi, tôi có một số nhóm người dùng khác nhau, chẳng hạn như phòng trò chuyện và các dự án cụ thể.Tôi làm cách nào để sử dụng Firebase để chia sẻ dữ liệu hiện diện một cách an toàn trong một nhóm cụ thể?

Làm cách nào để cho phép người dùng trong các nhóm đó chia sẻ dữ liệu hiện diện của họ và thấy sự hiện diện của mọi người dùng khác trong nhóm nhưng giữ dữ liệu đó ở chế độ riêng tư với thế giới bên ngoài?

Trả lời

15

Trước tiên, bạn sẽ cần bắt đầu xác thực người dùng của mình bằng cách sử dụng một trong các cơ chế xác thực Firebase được hỗ trợ. Thông tin thêm về xác thực trong Firebase có sẵn tại https://www.firebase.com/docs/security/authentication.html.

Khi bạn đã bắt đầu xác thực người dùng, dữ liệu người dùng được bảo mật, xác minh của người dùng sẽ có sẵn cho bạn trong các quy tắc bảo mật của bạn thông qua biến số auth. Giả sử rằng bạn đã xác thực người dùng và mỗi người dùng có một id duy nhất, có thể truy cập qua auth.uid.

Đối với sự hiện diện của nhóm chia sẻ, tôi sẽ khuyên bạn nên lưu trữ dữ liệu bằng cách sử dụng một cấu trúc như:

/groups/<group-id>/users/<user-id>/<presence-status>

Sử dụng cấu trúc này, bạn có thể viết các quy tắc bảo mật sẽ làm cho dữ liệu hiện diện cá nhân trên toàn cầu trong khi người sử dụng của chỉ có thể xem trạng thái hiện diện cho từng người dùng trong các nhóm họ được phép và chỉ chỉnh sửa trạng thái của người dùng của riêng họ. Dưới đây là một ví dụ an ninh ruleset mà thi hành những hạn chế:

{ 
    "groups": { 
    "$groupid": { 
     // Users can view the presence state of users in this group if they 
     // are authenticated and listed in the group themselves. 
     ".read": "auth != null && data.child('users').hasChild(auth.uid)" 
     "users": { 
     "$userid": { 
      // Users can update only their individual account data. 
      ".write": "auth != null && $userid == auth.uid && newData.val() != null" 
     } 
     } 
    } 
    } 
} 

Trong ví dụ trên, chỉ người dùng ở /groups/<group-id>/users/ có quyền xem dữ liệu hiện diện cho nhóm, và mỗi người dùng chỉ có thể sửa đổi dữ liệu cá nhân của họ. Người dùng chỉ có thể đọc/ghi vào nút người dùng cá nhân của họ.

Để mở rộng thêm một chút, giả sử bạn có một lớp người dùng đặc biệt là những người duy nhất được phép tạo nhóm. Bạn có thể bao gồm cấp độ quyền của người dùng khi tạo mã thông báo xác thực (ví dụ bên dưới, chúng tôi sẽ đặt isAdmin=true) và cấp cấp truy cập đặc biệt đó bằng các quy tắc bảo mật được cập nhật. Ví dụ: nếu chỉ một số người dùng nhất định được phép tạo nhóm, bạn có thể cập nhật quy tắc .write dưới $ groupid để trông giống như:

+1

Có một ví dụ về điều này ở đâu đó. – Harry

+0

Hoạt động tốt. Cảm ơn ! – Shirane85