Просмотр исходного кода

Add a REST API endpoint for updating user preferences

Jeremy Stretch 5 лет назад
Родитель
Сommit
2845dd488e
2 измененных файлов с 42 добавлено и 1 удалено
  1. 3 0
      netbox/users/api/urls.py
  2. 39 1
      netbox/users/api/views.py

+ 3 - 0
netbox/users/api/urls.py

@@ -12,5 +12,8 @@ router.register('groups', views.GroupViewSet)
 # Permissions
 router.register('permissions', views.ObjectPermissionViewSet)
 
+# User preferences
+router.register('config', views.UserConfigViewSet, basename='userconfig')
+
 app_name = 'users-api'
 urlpatterns = router.urls

+ 39 - 1
netbox/users/api/views.py

@@ -1,10 +1,15 @@
+from django.contrib.auth.decorators import login_required
 from django.contrib.auth.models import Group, User
 from django.db.models import Count
+from django.utils.decorators import method_decorator
+from rest_framework.permissions import IsAuthenticated
+from rest_framework.response import Response
 from rest_framework.routers import APIRootView
+from rest_framework.viewsets import ViewSet
 
 from netbox.api.views import ModelViewSet
 from users import filters
-from users.models import ObjectPermission
+from users.models import ObjectPermission, UserConfig
 from utilities.querysets import RestrictedQuerySet
 from . import serializers
 
@@ -41,3 +46,36 @@ class ObjectPermissionViewSet(ModelViewSet):
     queryset = ObjectPermission.objects.prefetch_related('object_types', 'groups', 'users')
     serializer_class = serializers.ObjectPermissionSerializer
     filterset_class = filters.ObjectPermissionFilterSet
+
+
+#
+# User preferences
+#
+
+class UserConfigViewSet(ViewSet):
+    """
+    An API endpoint via which a user can update his or her own UserConfig data (but no one else's).
+    """
+    permission_classes = [IsAuthenticated]
+
+    def get_queryset(self):
+        return UserConfig.objects.filter(user=self.request.user)
+
+    def list(self, request):
+        """
+        Return the UserConfig for the currently authenticated User.
+        """
+        userconfig = self.get_queryset().first()
+
+        return Response(userconfig.data)
+
+    def patch(self, request):
+        """
+        Update the UserConfig for the currently authenticated User.
+        """
+        # TODO: How can we validate this data?
+        userconfig = self.get_queryset().first()
+        userconfig.data.update(request.data)
+        userconfig.save()
+
+        return Response(userconfig.data)