2017-03-07 7 views
5

की सूची के लिए फायरबेस स्टोरेज कस्टम मेटाडाटा सुरक्षा नियम मैं एक मैसेजिंग आईओएस ऐप विकसित कर रहा हूं, जहां कोई उपयोगकर्ता एकाधिक लोगों को एक ही संदेश भेज सकता है। संदेश फायरबेस स्टोरेज में सहेजा गया है। मैं केवल उन उपयोगकर्ताओं को सक्षम करना चाहता हूं जिन्हें संदेश भेज दिया गया है ताकि वे इसे स्टोरेज से पढ़ सकें। मैं पहले से ही अपने फायरबेस डेटाबेस में इस नियम संरचना को लागू कर रहा हूं।यूआईड्स

भंडारण के लिए इसे कार्यान्वित करने के लिए मैं संदेश फ़ाइल कस्टममैटाटाटा में यूआईडी की एक सूची जोड़ता हूं, जिसमें संदेश लिखने वाले व्यक्ति के लिए एक यूआईडी कुंजी शामिल है। मुझे अपने iOS एप्लिकेशन में निम्न कार्य करें:

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 

यह मेरी पढ़ने के लिए मेरे प्रयास किया गया था और Firebase संग्रहण में संदेशों नोड के लिए सुरक्षा नियमों बारे में है, लेकिन यह काम नहीं करता है और प्रलेखन कोई मदद नहीं की है।

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 

} 

मेरा प्रयास काम नहीं करता है। मैं अपने सुरक्षा नियमों में 'fromUid' कुंजी और दोस्तों uids 'request.auth.uid' के साथ customMetadata चर का उपयोग कैसे करूं ??

एक साइडेनोट के रूप में, मुझे लगता है कि कस्टममैटाटा में कितनी कुंजियां जोड़ती हैं, इस पर कोई सीमा नहीं है?

+0

वास्तव में इस पर सहायता की सराहना करेगा। किसी कारण से मैंने जो कुछ भी किया है, वह काम नहीं कर पाया है। – Edward

उत्तर

2

इसलिए मैंने इसे हल करने में कामयाब रहा है। मेरी समस्या यह थी कि मैं जावास्क्रिप्ट से परिचित नहीं था और इसलिए मुझे वाक्यविन्यास गलत हो रहा था। जावास्क्रिप्ट में देखने के बाद मैं जल्द ही इसे काम करने में सक्षम था।

आशा है कि मेरा उत्तर किसी और की मदद करेगा, लेकिन यदि आप मेरे समान स्थिति में हैं तो जावास्क्रिप्ट की मूल बातें सीखने की सलाह देंगे।

यह भी ध्यान देने योग्य है कि फ़ाइल मेटाडेटा तक पहुंचने के लिए आप अनुरोध करने से पहले request.resource.metadata का उपयोग करते हैं और संसाधन अपलोड करने के बाद संसाधन। मेटाडेटा का उपयोग करते हैं।

match /messages/{messageId} { 

     allow write: if request.resource.metadata['fromUid'] == request.auth.uid; 
     allow read: if resource.metadata[request.auth.uid] == request.auth.uid; 
    } 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^