मैं उपयोगकर्ता के ईमेल पते के आधार पर दस्तावेज़ में दस्तावेज़ को पढ़ने की अनुमति देता हूं, तो मैं स्टोर करना चाहता हूं। एकाधिक उपयोगकर्ताओं को एक ही दस्तावेज़ तक पहुंच होनी चाहिए।मानचित्र मूल्यों के आधार पर फायरस्टोर सुरक्षा नियम
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'
की तरह पहुंचा जा सकता है, तो मैं गलत क्या कर रहा हूं?
सभी उदाहरण मैं resource.data ** वाइल्डकार्ड वाक्य रचना की जरूरत नहीं है के लिए देखा है, इसलिए हो सकता है resource.data केवल यदि आप का उपयोग काम करता है 'मैच/सूचियों/{ListId}' बजाय 'मैच/सूचियों/{ListId = **} '? कोशिश करने लायक कुछ। – Scarygami
नहीं, दुर्भाग्यवश यह भी काम नहीं कर रहा है –
हमम ... मैं ईमानदार रहूंगा; ऐसा लगता है कि यह ठीक काम करना चाहिए। क्या आप पहली बार जांच सकते हैं कि क्लाउड फायरस्टोर के बजाय रीयलटाइम डेटाबेस में आपने अपने डेटा को गलती से स्टोर नहीं किया है/अपने नियमों को संपादित नहीं किया है? (यह कभी-कभी होता है) इसके अलावा, क्या होता है यदि आप इसे कोई प्रश्न नहीं बनाते हैं और बस एक व्यक्तिगत दस्तावेज़ लाने का प्रयास करते हैं? –