मैं संसाधन 'उपयोगकर्ता' तक पहुंचने के लिए Django REST Framework का उपयोग कर रहा हूं।Django REST ढांचे ऑब्जेक्ट स्तर अनुमतियाँ
उपयोगकर्ता की जानकारी व्यक्तिगत है, इसलिए मैं सिस्टम पर हर उपयोगकर्ता को सूचीबद्ध करने का अनुरोध नहीं करना चाहता, UNLESS वे एक व्यवस्थापक हैं।
यदि उपयोगकर्ता अपनी आईडी निर्दिष्ट करता है, और वे लॉग इन हैं, तो मैं चाहता हूं कि वे उनके विवरण देख सकें और उन्हें संशोधित कर सकें (यदि संभव हो तो पोस्ट हटाएं)।
तो संक्षेप में, किसी भी व्यक्ति के लिए जीईटी विधि को अनुमति न दें जो व्यवस्थापक नहीं है और उपयोगकर्ताओं को उनकी जानकारी देखने पर लॉग इन पर हटा दें।
class UserPermissions(permissions.BasePermission):
"""
Owners of the object or admins can do anything.
Everyone else can do nothing.
"""
def has_permission(self, request, view):
# if admin: True otherwise False
def has_object_permission(self, request, view, obj):
# if request.user is the same user that is contained within the obj then allow
यह काम नहीं किया:
तो मैं कस्टम अनुमति वर्ग बनाया। कुछ डीबगिंग के बाद मुझे पता चला कि यह पहले_प्रमिशन की जांच करता है, फिर जांच करता है has_object_permission। तो अगर हम पहले नहीं पाते हैं कि पहली बार GET/उपयोगकर्ता/बाधा है, तो यह अगले जीईटी/उपयोगकर्ता/आईडी पर भी विचार नहीं करेगा।
तो संक्षेप में, क्या किसी को पता है कि मैं इसे काम करने के बारे में कैसे जाना चाहूंगा?
धन्यवाद :)
संपादित करें:
मैं उपयोग कर रहा था ModelViewSets है, जो के रूप में मैं वर्णित इस समस्या है।
लेकिन अगर आप विस्तार से साथ सूची कार्यक्षमता विभाजित तो आप उन्हें दे सकते हैं अलग अनुमति कक्षाएं:
class UserList(generics.ListCreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes=(UserPermissionsAll,)
class UserDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes=(UserPermissionsObj,)
class UserPermissionsAll(permissions.BasePermission):
"""
Owners of the object or admins can do anything.
Everyone else can do nothing.
"""
def has_permission(self, request, view):
if request.user.is_staff:
return True
else:
return False
class UserPermissionsObj(permissions.BasePermission):
"""
Owners of the object or admins can do anything.
Everyone else can do nothing.
"""
def has_object_permission(self, request, view, obj):
if request.user.is_staff:
return True
return obj == request.user
रासायनिक प्रोग्रामर से नीचे का समाधान 'विचारों 'के साथ काम करेगा। – jfunk