2017-03-07 15 views
5

Tôi đang phát triển ứng dụng nhắn tin iOS, nơi người dùng có thể gửi cùng một thông điệp tới nhiều người. Tin nhắn được lưu trong bộ nhớ firebase. Tôi chỉ muốn cho phép những người dùng đã được gửi tin nhắn để có thể đọc nó từ bộ nhớ. Tôi đã triển khai cấu trúc quy tắc này trong cơ sở dữ liệu Firebase của mình.Quy tắc bảo mật siêu dữ liệu tùy chỉnh Lưu trữ Firebase cho danh sách uids

Để thực hiện việc này cho bộ nhớ, tôi thêm danh sách uids vào tệp tin tùy chỉnhMục lục, bao gồm một khóa từUid cho người soạn thư. Tôi làm như sau trong ứng dụng iOS của tôi:

var metadataValues = [String:String]() 

    for friendUid in friendsSelected.keys { 
     metadataValues.updateValue(friendUid, forKey: friendUid) // how do I access these values in my security rules 
    } 
    metadataValues.updateValue(senderUid, forKey: "fromUid") // how do I access this in security rules 
    let messageMetadata = FIRStorageMetadata() 
    messageMetadata.customMetadata = metadataValues 

Đây là nỗ lực của tôi để đọc của tôi và viết các quy tắc bảo mật cho các thông điệp nút trong căn cứ hỏa lực lưu trữ nhưng nó không hoạt động và tài liệu hướng dẫn là giúp đỡ không.

match /messages/{messageId} { 

     allow read: if request.auth.uid == resource.metadata.request.auth.uid; // I want all friend uids to be able to read file 
     allow write: if request.auth.uid == resource.metadata.fromUid; // only the person who create the message can access it 

} 

Nỗ lực của tôi không hoạt động. Làm thế nào để tôi truy cập biến customMetadata bằng các phím 'fromUid' và bạn bè uids 'request.auth.uid' trong các quy tắc bảo mật của tôi ??

Là một phụ trang, tôi cho rằng không có giới hạn về số lượng khóa tôi thêm vào customMetadata?

+0

thực sự sẽ đánh giá cao trợ giúp về điều này. Đối với một số lý do tất cả mọi thứ tôi đã cố gắng đã không làm việc. – Edward

Trả lời

2

Vì vậy, tôi đã quản lý để giải quyết nó. Vấn đề tôi gặp phải là tôi không quen với Javascript và vì vậy tôi đã nhận được cú pháp sai. Sau khi nhìn vào Javascript tôi đã sớm có thể làm việc nó ra.

Hy vọng câu trả lời của tôi sẽ giúp bất kỳ ai khác nhưng sẽ khuyên bạn nên học những điều cơ bản về Javascript nếu bạn ở một vị trí tương tự với tôi.

Cũng đáng chú ý là để truy cập siêu dữ liệu tệp bạn sử dụng request.resource.metadata trước khi ghi được thực hiện và resource.metadata để truy cập sau khi tải lên.

match /messages/{messageId} { 

     allow write: if request.resource.metadata['fromUid'] == request.auth.uid; 
     allow read: if resource.metadata[request.auth.uid] == request.auth.uid; 
    } 
Các vấn đề liên quan