2016-07-29 7 views
7

स्वाभाविक रूप से मेरे डेटाबेस में उपयोगकर्ताओं की जानकारी है जो सार्वजनिक रूप से सुलभ हो सकती है और अन्य जानकारी केवल उन्हें देखना चाहिए। मैं इसे लागू करने के दो अलग-अलग तरीकों पर विचार कर रहा हूं।फायरबेस: सार्वजनिक/निजी उपयोगकर्ता डेटा को कैसे व्यवस्थित करें

विकल्प 1: केवल कि उपयोगकर्ता द्वारा /users/$uid पठनीय है और /users/$uid/profile किसी के द्वारा पठनीय होना है।

विकल्प 2:/users/$uid पढ़ने योग्य बनाएं केवल कि उपयोगकर्ता द्वारा और एक /profiles/$uid कि सार्वजनिक है। यह एक चापलूसी डेटा संरचना के लिए सिफारिश का पालन करता है, लेकिन मुझे नहीं लगता कि यह इस मामले में बेहतर कैसे है।

उत्तर

12

यह देखने का सबसे आसान तरीका है कि "चापलूसी" संरचना बेहतर क्यों है, यह देखने के लिए कि आप इसे कैसे सुरक्षित करेंगे और फिर आप कार्यक्षमता को कैसे कार्यान्वित करेंगे।

आपका पहला संरचना होती है:

users: { 
    uidOfJacob: { 
    stackId: 884522, 
    ssn: "999-99-9999", 
    profile: { 
     displayName: "Jacob Philips" 
    } 

    }, 
    uidOfPuf: { 
    stackId: 209103, 
    ssn: "999-99-9999", 
    profile: { 
     displayName: "Frank van Puffelen" 
    } 
    } 
} 

आप के साथ इसे सुरक्षित चाहते हैं: सार्वजनिक जानकारी होने के लिए

{ 
    "rules": { 
    "users": { 
     "$uid": { 
     ".read": "auth.uid == $uid", 
     ".write": "auth.uid == $uid" 
     "profile": { 
      ".read": true 
     } 
     } 
    } 
    } 
} 

मुख्य कारणों में से एक यह है कि जानकारी की एक सूची दिखाने के लिए सक्षम होने के लिए है । जावास्क्रिप्ट में:

ref.child('users').child(???).child('profile').on('child_added'... 

यह काम नहीं करेगा, क्योंकि हम ??? में डाल क्या करते हैं। फायरबेस ऑपरेशन को एक ही स्थान से पूरी सूची को पढ़ने में सक्षम होना चाहिए, और उपयोगकर्ता को उस पूरे स्थान पर पढ़ने की अनुमति होनी चाहिए (केवल व्यक्तिगत बाल नोड्स के लिए)।

हम डेटा संरचना, तो निजी जानकारी से सार्वजनिक जानकारी को अलग करने पर हम पाते हैं:

{ 
    "rules": { 
    "users": { 
     "$uid": { 
     ".read": "auth.uid == $uid", 
     ".write": "auth.uid == $uid" 
     } 
    }, 
    "profiles": { 
     ".read": true, 
     "$uid": { 
     ".write": "auth.uid == $uid" 
     } 
    } 
    } 
} 

नहीं की एक सूची प्राप्त करने के लिए:

users: { 
    uidOfJacob: { 
    stackId: 884522, 
    ssn: "999-99-9999", 
    profile: { 
     displayName: "Jacob Philips" 
    } 

    }, 
    uidOfPuf: { 
    stackId: 209103, 
    ssn: "999-99-9999", 
    profile: { 
     displayName: "Frank van Puffelen" 
    } 
    } 
}, 
"profile": { 
    uidOfJacob: { 
    displayName: "Jacob Philips" 
    }, 
    uidOfPuf: { 
    displayName: "Frank van Puffelen" 
    } 
} 

आप इसे मदद से सुरक्षित था सार्वजनिक उपयोगकर्ता प्रोफाइल, आप करेंगे:

ref.child('profiles').on('child_added'... 

यह काम करेगा, क्योंकि सभी को पढ़ने की अनुमति है एन profiles

+0

मेरा वर्तमान उपयोग केस प्रोफ़ाइल आईडी को देखने के लिए है जब उपयोगकर्ता आईडी पहले से ही ज्ञात है, इसलिए मुझे मतभेदों को देखने में कठिनाई हुई। अधिक घोंसला वाला दृष्टिकोण प्रोफ़ाइल की एक सूची प्राप्त करने से रोकता है, जो बाद में काम में आ जाएगा। –

+0

इसका मूल अर्थ यह है कि पंजीकरण के बाद, नए उपयोगकर्ता को डेटाबेस में दो बार लिखने की आवश्यकता है: 1. "उपयोगकर्ता" नोड (इसके उपनोड के साथ यूआईडी) के लिए नई प्रविष्टि, 2. "प्रोफ़ाइल" नोड के लिए नई प्रविष्टि (displayName सबनोड के साथ यूआईडी) ? @FrankVanPuffelen – Ewoks

+2

@Ewoks हाँ, यह सही है। फ्रैंक का दृष्टिकोण नोएसक्यूएल डेटाबेस डिज़ाइन में आम है, जिसमें पढ़ने के प्रदर्शन को कम करने के खर्च पर पढ़ने का प्रदर्शन बेहतर होता है। –

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