2013-01-23 56 views

Trả lời

31

Không có sự ủng hộ rõ ràng cho "nhóm" trong căn cứ hỏa lực, vì bạn có thể đại diện cho họ bản thân khá dễ dàng. Dưới đây là hai tùy chọn, tùy thuộc vào tình huống của bạn.

Lưu trữ thông tin nhóm trong Firebase.

Các dữ liệu sau đây có thể được sử dụng để đại diện cho 2 nhóm ('alpha' và 'beta') và 3 mẩu dữ liệu được bảo vệ ('thing1', 'thing2', và 'thing3')

{ 
    "groups": { 
    "alpha": { 
     "joe": true, 
     "sally": true 
    }, 
    "beta": { 
     "joe": true, 
     "fred": true 
    } 
    }, 
    "data": { 
    "thing1": { 
     "group": "alpha" 
     /* data accessible only by the "alpha" group */ 
    }, 
    "thing2": { 
     "group": "beta" 
     /* data accessible only by the "beta" group */ 
    }, 
    "thing3": { 
     "group": "alpha" 
     /* more data accessible by the "alpha" group */ 
    } 
    } 
} 

sau đó, chúng ta có thể sử dụng các quy tắc sau để thực thi bảo mật:

{ 
    "rules": { 
    "data": { 
     "$thing": { 
     ".read": "root.child('groups').child(data.child('group').val()).hasChild(auth.id)", 
     ".write": "root.child('groups').child(data.child('group').val()).hasChild(auth.id)" 
     } 
    } 
    } 
} 

vì vậy, sau đó nếu tôi chứng thực với {id: 'sally'} là đối tượng auth của tôi, tôi sẽ có quyền truy cập vào thing1 và thing3, nhưng không điều 2.

Lưu trữ thông tin nhóm trong mã thông báo xác thực.

Nếu bạn đang tạo mã thông báo xác thực của riêng mình và bạn biết những người dùng nào trong nhóm vào thời điểm họ xác thực, bạn có thể lưu trữ danh sách các nhóm trong mã thông báo xác thực bạn tạo. Ví dụ: khi bạn tạo mã thông báo xác thực cho người dùng 'đã', bao gồm "{id: 'fred', nhóm: {alpha: true, beta: true}}"

Và sau đó bạn có thể thực thi tư cách thành viên nhóm với:

{ 
    "rules": { 
    "data": { 
     "$thing": { 
     ".read": "auth[data.child('group').val()] != null", 
     ".write": "auth[data.child('group').val()] != null" 
     } 
    } 
    } 
} 
+0

Michael, cảm ơn bạn đã phản hồi nhanh, tùy chọn đầu tiên là những gì chúng tôi đang tìm kiếm. – user1452215

+1

Còn nếu bạn muốn cấp quyền truy cập vào dữ liệu thì điều $ cho nhiều nhóm (thay vì chỉ một)? Có một cái gì đó như .hasAnyChild() hoặc tương tự? – Pl4yeR

+0

Đối tượng JSON đầu tiên đi đâu? Điều đó định nghĩa các nhóm, alpha, beta, v.v. Tôi không nghĩ rằng bạn có thể đặt điều đó vào đối tượng bảo mật quy tắc thực tế ... trừ khi tôi đang thiếu cái gì đó? – Matt

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