2010-10-26 6 views
6

मैं एक दूसरी व्यवस्थापक साइट को कार्यान्वित करना चाहता हूं जो प्राथमिक व्यवस्थापक साइट की सुविधा का सबसेट प्रदान करता है। यह संभव है और Django docsगैर-कर्मचारी उपयोगकर्ता द्वारा Django व्यवस्थापक साइट को कैसे पहुंचाया जाए?

में वर्णित है, हालांकि, मैं प्राथमिक व्यवस्थापक साइट पर पहुंच को सीमित करना चाहता हूं। कुछ उपयोगकर्ता दूसरी साइट तक पहुंच सकते हैं लेकिन प्राथमिक साइट नहीं।

आदेश है कि सुविधा को लागू करने के लिए, मैं इन उपयोगकर्ताओं को स्टाफ (is_staff = झूठी) में होना चाहते हैं और फिर से लिखने AdminSite.has_permission

class SecondaryAdminSite(AdminSite): 

    def has_permission(self, request): 
     if request.user.is_anonymous: 
      try: 
       username = request.POST['username'] 
       password = request.POST['password'] 
      except KeyError: 
       return False 
      try: 
       user = User.objects.get(username = username) 
       if user.check_password(password): 
        return user.has_perm('app.change_onlythistable') 
       else: 
        return False 
      except User.DoesNotExist: 
       return False 
     else: 
      return request.user.has_perm('app.change_onlythistable') 

दुर्भाग्य से, इस दृष्टिकोण से काम नहीं करता होगा। उपयोगकर्ता लॉगिन कर सकता है लेकिन द्वितीयक व्यवस्थापक साइट में कुछ भी नहीं देख सकता है।

इस दृष्टिकोण के साथ क्या गलत है? कोई भी विचार इस सुविधा को कैसे कार्यान्वित करें?

अग्रिम धन्यवाद

+0

आप अपने उपयोगकर्ताओं को सुपरसर्स, प्रबंधकों, ग्राहकों आदि में क्यों विभाजित नहीं करते हैं - अनुमति प्रणाली पूरी तरह से काम करती है। –

+0

@ टोमाज़: मैं भी ऐसा कर रहा हूं। दूसरी प्रशासनिक साइट का एक अलग उद्देश्य है इसलिए विभिन्न प्रकार के उपयोगकर्ताओं को संबोधित करें। मैं इससे बचना चाहूंगा कि वे सामान्य व्यवस्थापक से जुड़ें। – luc

+0

मुझे लगता है कि आप सत्यापित कर रहे हैं कि सही 'has_permission' कहा जा रहा है? पृष्ठ पर जो कुछ भी दिखाई नहीं देता है (यानी यह पूरी तरह खाली है), या यह केवल व्यवस्थापक कार्यों को छुपा रहा है? –

उत्तर

2

मुझे लगता है कि अपने दृष्टिकोण अब संभव हो जाना चाहिए: http://code.djangoproject.com/ticket/14434 (बंद 5 सप्ताह पहले)

हालांकि, स्पष्ट "is_staff" चेक है

  • django.contrib.admin.forms.AdminAuthenticationForm.clean()

    : अभी भी दो स्थानों (अलग staff_member_required डेकोरेटर से) में किया

    "has_permission()" के शीर्ष पर आपको अपने गैर-कर्मचारी AdminSite को "login_form" के साथ प्रदान करना होगा जो is_staff चेक नहीं करता है, इसलिए तदनुसार केवल subclass और समायोजित कर सकता है।

  • टेम्पलेट्स/व्यवस्थापक/base.html

    की आवश्यकता होगी थोड़ा अनुकूलित किया जा करने के लिए। आईडी "उपयोगकर्ता-उपकरण" वाला div केवल सक्रिय कर्मचारियों के सदस्यों के लिए दिखाया गया है। मुझे लगता है कि ऐसा इसलिए हुआ है क्योंकि लॉगिन फॉर्म भी इस टेम्पलेट का उपयोग करता है, और किसी को सक्रिय गैर-कर्मचारी सदस्य के रूप में लॉग इन किया जा सकता है लेकिन फिर भी उन लिंक को नहीं देखना चाहिए।

+0

को अनुकूलित करने के लिए थोड़ा मुश्किल है, इस जानकारी के लिए धन्यवाद, मैं कोशिश करूँगा – luc

+0

कृपया मुझे बताएं कि आप कैसे जाते हैं क्योंकि यह अनचाहे है और मैं इसे कुछ चरण में करना चाहता हूं :-) –

+0

टिकट भी अगर आपको यह बदलने की ज़रूरत है। अतिरिक्त ब्राउनी पॉइंट्स के लिए, आप वहां पैच पर भी काम कर सकते हैं और हर किसी को लाभ होता है! :) – SmileyChris

-1

क्या इस दृष्टिकोण के साथ गलत क्या है? इस सुविधा को कार्यान्वित करने का कोई विचार?

इस दृष्टिकोण के साथ क्या गलत है कि अनुमतियां और समूह आपको पहले से ही प्रदान कर सकते हैं। यदि आपको केवल उपयोगकर्ताओं को विभाजित करना है तो AdminSite को उपclass करने की कोई आवश्यकता नहीं है।

यह शायद यही कारण है कि इस सुविधा इतने ख़राब तरीके से प्रलेखित है है, IMHO

+1

दूसरी साइट अनुमतियों को प्रबंधित करने का एक अलग तरीका नहीं है। यह कस्टम स्क्रीन और अतिरिक्त सुविधाएं प्रदान करता है। Django व्यवस्थापक साइट महान है और अत्यधिक अनुकूलित किया जा सकता है। – luc

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