Django में एक टेम्पलेट के अंदर अनुमति की जाँच करें


95

क्या मैं Django में टेम्पलेट के अंदर प्रामाणिक एप्लिकेशन की अनुमति की जांच कर सकता हूं? (मैं विशेषाधिकार प्राप्त उपयोगकर्ताओं के लिए टेम्पलेट के अंत में एक सरल रूप प्रदर्शित करना चाहता हूं)

और इससे भी महत्वपूर्ण बात, क्या मुझे यह करना चाहिए या यह "Django रास्ता" नहीं है?


मेरे जैसे लोगों के लिए, जो इस पर बाद में ठोकर खाते हैं, Django 1.5 के लिए लिंक को थोड़ा बदल दिया गया था। जानकारी अब इस url में डॉक्स में मिल सकती है: docs.djangoproject.com/en/1.5/topics/auth/default/#permissions मूल उत्तर में कुछ भी वास्तव में नहीं बदला गया है, लेकिन यह सिर्फ एक नया यूआरएल है :)
Xudonax

जवाबों:


192

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

{% if perms.app_label.can_do_something %}
<form here>
{% endif %}

जहां मॉडल उस मॉडल को संदर्भित करता है जिसके लिए उपयोगकर्ता को फॉर्म देखने के लिए अनुमति की आवश्यकता होती है।

अधिक उदाहरणों के लिए https://docs.djangoproject.com/en/stable/topics/auth/default/#permissions का संदर्भ लें ।

वर्तमान में लॉग-इन उपयोगकर्ता की अनुमतियाँ टेम्पलेट चर में संग्रहीत हैं {{ perms }}

(यह निम्न संदर्भ प्रोसेसर की आवश्यकता है सक्षम होने के लिए: django.contrib.auth.context_processors.auth)


15
ध्यान दें कि यदि आप एक सुपरयुसर के रूप में लॉग इन हैं, perms.app_label.foobarतो हमेशा सच होगा, भले ही आपने अनुमति नाम को गलत लिखा हो।
फ्लिम

2
यहां यह भी ध्यान दें कि "can_do_something" अनुमति का नाम है, इसलिए आपको अनुमति नाम में "उपसर्ग" जोड़ सकते हैं। जैसे, perms.my_app.add_object
करीम सोनबोल

13

Django 2.0 + पर परीक्षण किया गया

यदि आप अपने टेम्प्लेट (.html) पर लॉग इन की गई सभी अनुमतियों को देखना चाहते हैं, तो प्रिंट करें:

{{ perms.app_name }}

या

{{ perms }}

यह देखने के लिए कि उपयोगकर्ता की अनुमति है, उपयोग करें:

{% if perms.app_name.change_model_name_lower_cased %}

जैसे:

{% if perms.Utilization.change_invoice %}

यहां: यूटिलाइजेशन मेरा ऐप नाम है। चालान एक मॉडल नाम है।

ध्यान दें कि सामान्य तौर पर, 4 प्रकार की अनुमतियां होंगी:

  • परिवर्तन [जैसे Utilization.change_projectemail]
  • देखें [उदाहरण Utilization.view_invoice]
  • [एग यूटिलाइज़ेशन। डिलीट_इन्विक्यूटाइप] हटाएं
  • [Eg Utilization.add_invoicetype] जोड़ें

इसके अलावा, यदि आप उन सभी अनुमतियों को देखना चाहते हैं जो उपयोगकर्ता उस समूह के कारण हैं, जो Django खोल को लॉन्च करता है ...

user = User.objects.get(username='somename')
user.get_group_permissions()

यहां, सूचीबद्ध सभी अनुमतियाँ, उन समूहों के कारण हैं जो वह संबंधित हैं।


1
हाँ। वास्तव में: निचले स्तर पर। सर्प_नहीं। {{Perms}} के साथ अनुमतियां देखने का विचार बहुत अच्छा है, इसलिए मुझे लगता है कि यह सबसे अच्छा जवाब है।
मर्क

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.