2009-06-27 13 views
12

मैं एक मेनू प्रदर्शित करना चाहता हूं जो वर्तमान में लॉग इन उपयोगकर्ता के उपयोगकर्ता समूह के अनुसार बदलता है, इस तर्क के साथ मेरे तर्क के अंदर, और फिर एक चर सेट निर्धारित करने के लिए टेम्पलेट में चेक करने के लिए सेट करें कौन सा मेन्यू आइटम दिखाना है .... मैंने पहले इस सवाल से पूछा था, लेकिन मेरा तर्क टेम्पलेट में किया जा रहा था। तो अब मैं मेरे विचार में यह चाहते हैं ... मेनूटेम्पलेट में उपयोगकर्ता समूह प्राप्त करें

<ul class="sidemenu"> 
    <li><a href="/">General List </a></li> 
    <li><a href="/sales_list">Sales List </a></li> 
    <li><a href="/add_vehicle">Add a New Record </a></li> 
    <li><a href="/edit_vehicle">Edit Existing Record </a></li> 
    <li><a href="/filter">Filter Records </a></li> 
    <li><a href="/logout">Logout </a></li> 
    </ul> 

नीचे के रूप में प्रबंधन उपयोगकर्ता के Suppossing लग रहा है, वे सब कुछ देखेंगे ... लेकिन उपयोगकर्ता संभालने समूह बिक्री में है, वे करेंगे केवल पहले दो और अंतिम दो आइटम देखें ... और इसी तरह। मैं उपयोगकर्ता के समूह के आधार पर लॉगिन के बाद गतिशील रीडायरेक्ट भी चाहता हूं। कोई विचार?

उत्तर

19

मानक अनुमति देने का मानक Django तरीका समूह नाम के परीक्षण के बजाए व्यक्तिगत अनुमति झंडे से है।

आप समूह के नाम की जाँच करना आवश्यक है, के बारे में पता करने के लिए समूह उपयोगकर्ता अनेक-से-अनेक संबंध, आप पहले समूह समूहों की सूची में अपने टेम्पलेट में कुछ इस तरह से प्राप्त कर सकते है कि किया जा रहा है:

{{ user.groups.all.0 }} 

या एक सशर्त में इस तरह इसे का उपयोग (अपरीक्षित लेकिन काम करना चाहिए):

{% ifequal user.groups.all.0 'Sales' %} 
    ... 
{% endif %} 

आप वरीय अनुमति मॉडल के साथ जाना है, तो आप निम्नलिखित की तरह कुछ करना होगा।

... 

    {% if perms.vehicle.can_add_vehicle %} 
    <li><a href="/add_vehicle">Add a New Record </a></li> 
    {% endif %} 
    {% if perms.vehicle.can_change_vehicle %} 
    <li><a href="/edit_vehicle">Edit Existing Record </a></li> 
    {% endif %} 

... 

ये स्वचालित रूप से syncdb अपने अनुप्रयोग संभालने द्वारा आपके लिए बनाई गई अनुमतियों vehicle कहा जाता है और मॉडल Vehicle कहा जाता है।

यदि उपयोगकर्ता एक सुपरसियर है तो वे स्वचालित रूप से सभी अनुमतियां प्राप्त करते हैं।

यदि उपयोगकर्ता एक बिक्री समूह में है तो उनके पास उन वाहन अनुमतियां नहीं होंगी (जब तक कि आप उन्हें समूह के समूह में शामिल नहीं करते)।

यदि उपयोगकर्ता प्रबंधन समूह में है तो उनके पास उन अनुमतियां हो सकती हैं, लेकिन आपको उन्हें Django व्यवस्थापक साइट में समूह में जोड़ने की आवश्यकता है।

अपने अन्य प्रश्न के लिए, उपयोगकर्ता समूह के आधार पर लॉगिन पर रीडायरेक्ट करें: समूह से उपयोगकर्ता कई से अधिक रिश्ते हैं इसलिए इसे एक-से-कई लोगों की तरह उपयोग करना वास्तव में एक अच्छा विचार नहीं है।

3
user.groups.all.0.name == "groupname" 
9

अपने ऐप्लिकेशन में user_tags.py बनाएं/templatetags ऊपर का पालन करें:

# -*- coding:utf-8 -*- 
from __future__ import unicode_literals 

# Stdlib imports 

# Core Django imports 
from django import template 

# Third-party app imports 

# Realative imports of the 'app-name' package 


register = template.Library() 


@register.filter('has_group') 
def has_group(user, group_name): 
    """ 
    Verifica se este usuário pertence a um grupo 
    """ 
    groups = user.groups.all().values_list('name', flat=True) 
    return True if group_name in groups else False 

और अंत में टेम्पलेट में इसका इस्तेमाल करते हैं:

{% if request.user|has_group:"Administradores"%} 
     <div> Admins can see everything </div> 
{% endif %} 
+0

बस को '{% लोड मत भूलना टेम्पलेट में user_tags%} '। – zeridon

+0

उदाहरण के लिए समूह ए या समूह बी में यह जांचने के लिए मैं इस कोड का उपयोग कैसे कर सकता हूं? – AlexW

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