2012-01-21 39 views
6

आप कैसे सुनिश्चित करते हैं कि उपयोगकर्ता केवल उन वस्तुओं को संपादित कर सकता है जिन्हें उन्होंने बनाया है? इसे स्थापित करने का सबसे अच्छा तरीका क्या है?ऑब्जेक्ट-स्तरीय अनुमतियां django

मैं django-rest-framework का उपयोग कर रहा हूं और सोच रहा हूं कि क्या कोई तरीका है कि मैं उपयोगकर्ताओं को उन वस्तुओं को देखने/संपादित करने से प्रतिबंधित कर सकता हूं, जिनके पास 'स्वयं' नहीं है।

class Video(models.Model): 
    owner = models.ForeignKey(User) 
    ... 

तो उपयोगकर्ता 'x' केवल अपने स्वामी_सेट में वीडियो संपादित करने में सक्षम होना चाहिए।

+0

आप उपयोगकर्ता एक वस्तु का "स्वामित्व" कैसे परिभाषित करते हैं में फिल्टर लागू करेंगे? कृपया अपने पर्याप्त मॉडल शामिल करें जो हम देख सकते हैं कि आप किस बारे में बात कर रहे हैं। –

+0

@ एसएलॉट ने इसे शामिल करने के लिए अभी अपडेट किया है। –

उत्तर

2

संभवतः आपके पास सत्र हैं और ऑथ मॉडल चालू है।

आपको यह सुनिश्चित करना होगा कि सभी विचार (REST और गैर-REST) ​​प्रमाणीकरण की आवश्यकता है।

गैर-आरईएसटी के लिए, यह आसान है। आप बस हर जगह एक बुनियादी @login-required सजावटी का उपयोग करें।

Django-REST फ्रेमवर्क के लिए, इसे पढ़ें: http://django-rest-framework.org/library/authentication.html#module-authentication

आपको यह सुनिश्चित करने के लिए प्रमाणीकरण मिश्रण का उपयोग करना होगा कि प्रमाणीकरण वास्तव में हुआ।

ढांचा बुनियादी प्रमाणीकरण का समर्थन करता है, जिसके लिए एक एसएसएल कनेक्शन सुरक्षित होना आवश्यक है। डीआईजीईटी प्रमाणीकरण को लागू करना बहुत मुश्किल नहीं है, जिसे एसएसएल की आवश्यकता नहीं है।

सत्र से बचें। यह लॉगिन और लॉगआउट के लिए आरईएसटी के सिद्धांत का उल्लंघन करता है। ढांचा सत्र का समर्थन करता है, लेकिन यह आदर्श से कम है।

एक बार आपके पास सभी अनुरोध प्रमाणीकृत होने के बाद, आप उपयोगकर्ता को जानेंगे।

यदि आप उपयोगकर्ता को जानते हैं, तो user.video_set पूरी तरह से काम करता है। यह सुनिश्चित करने के लिए कि आप उपयोगकर्ता से पूछताछ कर रहे हैं, Video.objects.filter(...) का उपयोग भी कर सकते हैं, लेकिन अगर आप user.video_set.get(...) या user.video_set.filter() या जो भी हो, तो कोड की पुष्टि करना आसान है।

सभी प्रासंगिक प्राधिकरण जांच दृश्यों में की जाती है। आप अपने मॉडल स्रोतों के लिए दृश्य प्रदान कर रहे हैं।

ये "कक्षा-आधारित विचार" हैं। दस्तावेज़ीकरण यहां है: https://docs.djangoproject.com/en/dev/topics/class-based-views/#viewing-subsets-of-objects

चाल सभी सही मिश्रण और धारावाहिकों को चुनना है।

उदाहरण के लिए, आप प्राप्त कर सकते हैं मिश्रण इस तरह प्रसंस्करण:

http://django-rest-framework.org/howto/mixin.html

आप get विधि

+1

पूरी तरह से जवाब के लिए बहुत बहुत धन्यवाद! मैं अभी भी सोच रहा हूं कि उपयोगकर्ता के आधार पर फ़िल्टर करने वाले कोड को उचित स्थान कहां रखना है? मैंने अभी Django-REST का उपयोग करना शुरू कर दिया है और मुझे यह पता लगाने में परेशानी हो रही है ... –

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