2013-10-15 5 views
15

में समूह है, मैं एक कस्टम अनुमति बनाने का सबसे अच्छा तरीका सोच रहा था जो जांचता है कि उपयोगकर्ता किसी विशेष समूह में है या नहीं। पहले, मेरे पास एक सजावटी था जिसे मैं उपयोगकर्ता ऑब्जेक्ट के साथ समूह नामों के समूह में गुजरने के लिए उपयोग कर सकता था और फिर जांच सकता था कि वह उपयोगकर्ता निर्दिष्ट समूहों में था या नहीं।Django REST ढांचा: उपयोगकर्ता को समूह

Ie:

def in_group_views(*group_names): 
    """Requires user membership in at least one of the groups passed in.""" 

    def in_groups(u): 
     if u.is_authenticated(): 
      if bool(u.groups.filter(name__in=group_names)) | u.is_superuser: 
       return True 
     return False 

    return user_passes_test(in_groups) 

मैं एक viewset के लिए डीआरएफ के लिए ऐसा होगा कैसे ध्यान में रखते हुए मैं अलग कार्यों के लिए अलग-अलग समूह सदस्यता (पोस्ट, PUT, GET) आदि

के लिए जांच करने की आवश्यकता

बहुत धन्यवाद, बेन

उत्तर

32

अनुमति कक्षाओं को पैरामीटर करने का समझदार तरीका दृश्य वर्ग पर पैरामीटर डालना है। इससे आप दृष्टिकोण को देखने के लिए व्यवहार को बदल देंगे।

यहाँ एक उदाहरण है:

def is_in_group(user, group_name): 
    """ 
    Takes a user and a group name, and returns `True` if the user is in that group. 
    """ 
    return Group.objects.get(name=group_name).user_set.filter(id=user.id).exists() 

class HasGroupPermission(permissions.BasePermission): 
    """ 
    Ensure user is in required groups. 
    """ 

    def has_permission(self, request, view): 
     # Get a mapping of methods -> required group. 
     required_groups_mapping = getattr(view, 'required_groups', {}) 

     # Determine the required groups for this particular request method. 
     required_groups = required_groups_mapping.get(request.method, []) 

     # Return True if the user has all the required groups. 
     return all([is_in_group(request.user, group_name) for group_name in required_groups]) 

फिर आप तो जैसे HasGroupPermission वर्ग इस्तेमाल कर सकते हैं:

class MyView(APIView): 
    permission_classes = [HasGroupPermission] 
    required_groups = { 
     'GET': ['moderators', 'members'], 
     'POST': ['moderators'], 
    } 

    ... 

आशा में मदद करता है!

+2

आप सर एक सज्जन और विद्वान हैं, बहुत धन्यवाद! –

+0

आपका स्वागत है। –

+0

आपकी मदद के लिए धन्यवाद –