Using Python set type to implement ACL -


वर्तमान में मेरे पास टेबल हैं: पेज, समूह, समूह पेज, उपयोगकर्ता, यूजरग्रुप । मसालेदार सेट के साथ मैं केवल 3 तालिकाओं के साथ एक ही चीज़ को लागू कर सकता हूं: पेज, समूह, उपयोगकर्ता

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

यदि मानव पठनीयता महत्वपूर्ण है, तो मैं हमेशा सीरियललाइज़ेशन के लिए cPickle के बजाय json का उपयोग करें और पायथन में अनुमति सूची में हेर-फेर करते समय सेट का उपयोग करें। यह अत्यधिक संभावना नहीं है कि अनुमतियां कभी भी एसक्यूएल का उपयोग कर सीधे संपादित हो जाएंगी। तो क्या यह एक अच्छा डिजाइन विचार है?

हम एसक्यूएलएलएमी का उपयोग ओआरएम के रूप में कर रहे हैं, इसलिए इसे PickleType कॉलम के साथ लागू किया जा सकता है मैं पूरे मसालेदार "संसाधन" रिकॉर्डसेट को स्टोर करने की योजना नहीं बना रहा हूं, केवल "संसाधन" प्राथमिक कुंजी मानों से बना सेट ऑब्जेक्ट।

यदि आप अचार सेट पर जा रहे हैं, तो आपको एक अच्छा ऑब्जेक्ट डेटाबेस (जैसे) मिलना चाहिए। शुद्ध-संबंधपरक दुनिया में, आपके सेट को ब्लॉड्स के रूप में संग्रहित किया जाता है, जो अच्छी तरह से काम करता है। ओआरएम स्थिति में अचार बनाने की कोशिश करने से ओआरएम मैपिंग के साथ भ्रामक समस्याएं हो सकती हैं, क्योंकि वे बिना किसी ब्लॉब के विशुद्ध रूप से संबंधपरक मैपिंग मानते हैं जिन्हें डीकोड किया जाना चाहिए।

सेट और अन्य प्रथम श्रेणी की वस्तुओं वास्तव में क्या हैं एक डेटाबेस में है ORM एक हैक क्योंकि कुछ लोग सोचते हैं कि संबंधपरक डेटाबेस "बेहतर" हैं, इसलिए हम एक मैपिंग परत में हैक करते हैं।

किसी ऑब्जेक्ट डेटाबेस से जाएं और आपको लगता है कि चीजें अक्सर बहुत चिकनी होती हैं।


संपादित करें

SQLAlchemy के पास अपनी सीरियलइज़र है।

यह न तो अचार है या cPickle हालांकि, क्योंकि इसे एक्स्टेंसिबल होने की आवश्यकता है, यह अचार जैसे व्यवहार करेगा। कौन सा - आपके उद्देश्यों के लिए - जितनी जल्दी आपको ज़रूरत होगी आप एसीएल के हर समय deserializing नहीं किया जाएगा।


Comments

Popular posts from this blog

python - Overriding the save method in Django ModelForm -

html - CSS autoheight, but fit content to height of div -

qt - How to prevent QAudioInput from automatically boosting the master volume to 100%? -