2017-10-10 11 views
9

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

the documentation Firestore के अनुसार सरणी सदस्यों से क्वेरी अनुमति नहीं है। यही कारण है कि मैं एक ईमेल के रूप में ईमेल पते के साथ एक स्ट्रिंग-बूल मानचित्र में उपयोगकर्ता ईमेल पते संग्रहीत कर रहा हूं।

निम्न उदाहरण मैं नक्शा कुंजी के रूप में ईमेल का उपयोग नहीं के लिए, क्योंकि यह पहले से ही बुनियादी तार के साथ काम नहीं करता।

डेटाबेस संरचना इस तरह दिखता है:

lists 
    list_1 
    id: String 
    name: String 
    owner: E-Mail 
    type: String 
    shared: 
     test: true 

सभी सुरक्षा नियमों यहाँ सूचीबद्ध हैं:

service cloud.firestore { 
    match /databases/{database}/documents { 
    match /lists/{listId=**} { 
     allow read: if resource.data.shared.test == true 
    } 
    } 
} 

संपादित करें: यह भी है कि अगर मैं बजाय match /lists/{listId} का उपयोग काम नहीं करता है match /lists/{listId=**}

मैं इसे कैसे समझता हूं, इस सुरक्षा नियमों को मानचित्र में shared[test] मानचित्र में मूल्य सही होने पर सभी को पढ़ने की अनुमति देनी चाहिए।

completness खातिर:

collection.whereEqualTo("shared.test", true).get() 
     .addOnCompleteListener(activity, { task -> 
      if (task.isSuccessful) { 
       Log.i("FIRESTORE", "Query was successful") 
      } else { 
       Log.e("FIRESTORE", "Failed to query existing from Firestore. Error ${task.exception}") 
      } 
     }) 

मेरा अनुमान है कि यह है कि मैं सुरक्षा नियमों से नक्शा मूल्यों का उपयोग नहीं कर सकते हैं: इस क्वेरी मैं उपयोग कर रहा हूँ (Kotlin Android पर) है। तो मेरी समस्या का एक वैकल्पिक समाधान क्या होगा?

Firestore rules reference में यह लिखा गया है कि मानचित्र resource.data.property == 'property' की तरह पहुंचा जा सकता है, तो मैं गलत क्या कर रहा हूं?

+0

सभी उदाहरण मैं resource.data ** वाइल्डकार्ड वाक्य रचना की जरूरत नहीं है के लिए देखा है, इसलिए हो सकता है resource.data केवल यदि आप का उपयोग काम करता है 'मैच/सूचियों/{ListId}' बजाय 'मैच/सूचियों/{ListId = **} '? कोशिश करने लायक कुछ। – Scarygami

+0

नहीं, दुर्भाग्यवश यह भी काम नहीं कर रहा है –

+0

हमम ... मैं ईमानदार रहूंगा; ऐसा लगता है कि यह ठीक काम करना चाहिए। क्या आप पहली बार जांच सकते हैं कि क्लाउड फायरस्टोर के बजाय रीयलटाइम डेटाबेस में आपने अपने डेटा को गलती से स्टोर नहीं किया है/अपने नियमों को संपादित नहीं किया है? (यह कभी-कभी होता है) इसके अलावा, क्या होता है यदि आप इसे कोई प्रश्न नहीं बनाते हैं और बस एक व्यक्तिगत दस्तावेज़ लाने का प्रयास करते हैं? –

उत्तर

9

संपादित करें: यह समस्या अब तय किया जाना चाहिए। यदि आप अभी भी इसे देख रहे हैं (और सुनिश्चित हैं कि यह नियम मूल्यांकनकर्ता के साथ एक बग है), मुझे टिप्पणियों में बताएं।

मैं कुछ लोग यहाँ समस्या आप का सामना कर रहे के बारे में के साथ चैट किया था, और यह सुरक्षा के नियमों के साथ ही एक मुद्दा प्रतीत होता है। अनिवार्य रूप से, समस्याएं प्रश्नों में नेस्टेड फ़ील्ड का मूल्यांकन करने के लिए विशिष्ट प्रतीत होती हैं, जैसे आप क्या कर रहे हैं।

तो, मूल रूप से, क्या तुम ठीक से काम करना चाहिए कर रहे हैं, और आप इस firestore टीम की ओर से एक अद्यतन के लिए प्रतीक्षा करने के लिए इस क्वेरी काम करने के लिए की आवश्यकता होगी। जब ऐसा होता है तो मैं इस जवाब को अद्यतन करने के लिए याद रखने की कोशिश करूंगा। उसके लिए क्षमा चाहता हूँ!

+0

क्या इस जगह या खुद को जांचने के लिए कोई अपडेट है? मुझे इस मुद्दे से भी अवरुद्ध किया गया है और कोई अच्छा कामकाज नहीं है (डेटा पुनर्गठन से कम) हम –

+2

लटका रहे हैं अभी तक कोई अपडेट नहीं है, लेकिन मुझे पता है कि टीम सक्रिय रूप से इस पर काम कर रही है। –

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