From f3b4f7aa28ab6cc701140ea865e405346c5c432c Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 9 Nov 2021 16:07:25 +1100 Subject: [PATCH] Add "detail" view for global settings objects - Can view and edit (but not delete) - User must have "staff" status to access --- InvenTree/common/api.py | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/InvenTree/common/api.py b/InvenTree/common/api.py index e995510416..a223b0347c 100644 --- a/InvenTree/common/api.py +++ b/InvenTree/common/api.py @@ -8,7 +8,7 @@ from __future__ import unicode_literals from django.conf.urls import url, include from django_filters.rest_framework import DjangoFilterBackend -from rest_framework import filters, generics +from rest_framework import filters, generics, permissions import common.models import common.serializers @@ -42,6 +42,40 @@ class GlobalSettingsList(SettingsList): serializer_class = common.serializers.GlobalSettingsSerializer +class GlobalSettingsPermissions(permissions.BasePermission): + """ + Special permission class to determine if the user is "staff" + """ + + def has_permission(self, request, view): + """ + Check that the requesting user is 'admin' + """ + + print("User:", request.user, request.user.is_staff) + + try: + user = request.user + + return user.is_staff + except AttributeError: + return False + + +class GlobalSettingsDetail(generics.RetrieveUpdateAPIView): + """ + Detail view for an individual "global setting" object. + + - User must have 'staff' status to view / edit + """ + + queryset = common.models.InvenTreeSetting.objects.all() + serializer_class = common.serializers.GlobalSettingsSerializer + + permission_classes = [ + GlobalSettingsPermissions, + ] + class UserSettingsList(SettingsList): """ @@ -81,6 +115,7 @@ common_api_urls = [ # Global settings url(r'^global/', include([ # Global Settings Detail + url(r'^(?P\d+)/', GlobalSettingsDetail.as_view(), name='api-global-setting-detail'), # Global Settings List url(r'^.*$', GlobalSettingsList.as_view(), name='api-global-setting-list'),