मैं एक डीआरएफ आवेदन के प्रमाणीकरण को डिजाइन कर रहा हूं। मुझे केवल अनुमतियों की बजाय भूमिकाओं का उपयोग करने की आवश्यकता नहीं है।डिजाइनिंग Django रेस्ट फ्रेमवर्क भूमिका आधारित प्राधिकरण
मेरे पास एक मॉडल है (उदा। project
) जिसमें मेरे पास कुछ जानकारी है (उदा। नाम, वर्णन) जिसे कुछ भूमिकाओं द्वारा संशोधित किया जा सकता है (उदा। admin
)। लेकिन साथ ही अन्य भूमिकाएं भी हैं (उदा। worker
) जो उस मॉडल के अंदर उस जानकारी को संशोधित करने में सक्षम नहीं होनी चाहिए लेकिन फिर भी कुछ अन्य जानकारी (जैसे प्रारंभिक और अंतिम तिथियां) को संशोधित कर सकती है।
मैंने इस मुद्दे के लिए दो समाधान सोचा है। पहला अनुरोध HTTP अनुरोध को पढ़ रहा है और अनुरोध के आधार पर किए जाने वाले कार्यों को परिभाषित कर रहा है। इसका मतलब यह है कि प्रत्येक बार जब मॉडल में एक नया फ़ील्ड जोड़ा जाता है, तो मुझे इस तर्क को संशोधित करना होगा। यह बनाए रखने के लिए बहुत मुश्किल लगता है, त्रुटि प्रवण है और कमजोरियों को पेश कर सकते हैं।
दूसरी ओर, मैंने सोचा है कि मैं मॉडल को दो अलग-अलग मॉडल में विभाजित कर सकता हूं। उनमें से एक डेटा जिसमें केवल एक भूमिका है (admin
) संशोधित कर सकता है और दूसरा अन्य डेटा को परिभाषित कर सकता है जिसे दोनों भूमिकाओं द्वारा संशोधित किया जा सकता है (admin
, worker
)। इस तरह, मुझे HTTP अनुरोध को पार्स नहीं करना पड़ेगा, क्योंकि अगर मुझे पहले मॉडल को प्रभावित करने वाला POST/PUT अनुरोध मिलता है और उपयोगकर्ता की कार्यकर्ता भूमिका होती है तो मैं इसे सीधे अस्वीकार कर सकता हूं।
यह स्थिति एक से अधिक मॉडल के साथ होती है।
मैं जानना चाहता हूं कि जाने का कोई डिफ़ॉल्ट तरीका है या मैं पहिया को फिर से शुरू कर रहा हूं। मुझे लगता है कि यह स्थिति वास्तव में आम होनी चाहिए। उदाहरण के लिए, मैं एक गिट प्रोजेक्ट के बारे में सोच सकता हूं जिसमें कुछ उपयोगकर्ताओं को एक परियोजना के अंदर एक चीज करने की सुविधा है लेकिन दूसरों को नहीं।
पूरक नोट्स (प्रतिक्रिया वास्तव में सराहना की जाएगी):
मैं सबसे शायद भूमिकाएं और अनुमतियां लागू करने के लिए django-role-permissions मॉड्यूल का उपयोग करेगा। मैं django अंतर्निहित समूहों का उपयोग नहीं कर सकता क्योंकि, हालांकि आप उन्हें अनुमतियां जोड़ सकते हैं, मैं उन्हें समूह उपयोगकर्ताओं (रोल के साथ कुछ भी करने के बिना) का उपयोग करूंगा।
मैं अनुमति फ़ाइल में भूमिकाओं और अनुमतियों (स्ट्रिंग आधारित अनुमति, जैसे
create_project
,modify_project_description
) के बीच संबंध बनाएगा।प्रत्येक अनुरोध प्राप्त करते समय मैं जांच करूंगा कि कौन सी भूमिकाओं में उस क्रिया को करने के लिए विशेषाधिकार हैं और जांचें कि क्या उपयोगकर्ता उन भूमिकाओं में से कोई है (गतिविधि आधारित प्राधिकरण, इसका मतलब है कि अंत में मैं गतिविधि/क्रिया की जांच करूंगा भूमिका के)।
आप एक उपरोक्त के लायक हैं क्योंकि मैं आपके द्वारा उल्लेख की गई सभी चीजों को लागू करने के लिए समाप्त होता हूं (प्रॉक्सी मॉडल से अलग)। – newlog