55import os
66import time
77
8- from core .permissions import all_permissions
8+ from core .permissions import ViewClassPermission , all_permissions
99from core .utils .io import read_yaml
1010from django .conf import settings
1111from drf_spectacular .utils import extend_schema
1515from rest_framework .exceptions import NotFound , ValidationError
1616from rest_framework .parsers import FormParser , JSONParser , MultiPartParser
1717from rest_framework .response import Response
18- from rest_framework .settings import api_settings
19-
20- from label_studio .core .utils .common import load_func
2118
2219logger = logging .getLogger (__name__ )
2320
24- StoragePermission = load_func (settings .STORAGE_PERMISSION )
25-
2621
2722class ImportStorageListAPI (generics .ListCreateAPIView ):
28- permission_required = all_permissions .projects_change
29- permission_classes = api_settings .DEFAULT_PERMISSION_CLASSES + [StoragePermission ]
23+ permission_required = ViewClassPermission (
24+ GET = all_permissions .storages_view ,
25+ POST = all_permissions .storages_change ,
26+ )
3027 parser_classes = (JSONParser , FormParser , MultiPartParser )
3128
3229 serializer_class = ImportStorageSerializer
@@ -46,8 +43,12 @@ def get_queryset(self):
4643class ImportStorageDetailAPI (generics .RetrieveUpdateDestroyAPIView ):
4744 """RUD storage by pk specified in URL"""
4845
49- permission_required = all_permissions .projects_change
50- permission_classes = api_settings .DEFAULT_PERMISSION_CLASSES + [StoragePermission ]
46+ permission_required = ViewClassPermission (
47+ GET = all_permissions .storages_view ,
48+ PATCH = all_permissions .storages_change ,
49+ PUT = all_permissions .storages_change ,
50+ DELETE = all_permissions .storages_change ,
51+ )
5152 parser_classes = (JSONParser , FormParser , MultiPartParser )
5253 serializer_class = ImportStorageSerializer
5354
@@ -58,8 +59,10 @@ def put(self, request, *args, **kwargs):
5859
5960class ExportStorageListAPI (generics .ListCreateAPIView ):
6061
61- permission_required = all_permissions .projects_change
62- permission_classes = api_settings .DEFAULT_PERMISSION_CLASSES + [StoragePermission ]
62+ permission_required = ViewClassPermission (
63+ GET = all_permissions .storages_view ,
64+ POST = all_permissions .storages_change ,
65+ )
6366 parser_classes = (JSONParser , FormParser , MultiPartParser )
6467 serializer_class = ExportStorageSerializer
6568
@@ -91,8 +94,12 @@ def perform_create(self, serializer):
9194class ExportStorageDetailAPI (generics .RetrieveUpdateDestroyAPIView ):
9295 """RUD storage by pk specified in URL"""
9396
94- permission_required = all_permissions .projects_change
95- permission_classes = api_settings .DEFAULT_PERMISSION_CLASSES + [StoragePermission ]
97+ permission_required = ViewClassPermission (
98+ GET = all_permissions .storages_view ,
99+ PATCH = all_permissions .storages_change ,
100+ PUT = all_permissions .storages_change ,
101+ DELETE = all_permissions .storages_change ,
102+ )
96103 parser_classes = (JSONParser , FormParser , MultiPartParser )
97104 serializer_class = ExportStorageSerializer
98105
@@ -103,7 +110,9 @@ def put(self, request, *args, **kwargs):
103110
104111class ImportStorageSyncAPI (generics .GenericAPIView ):
105112
106- permission_required = all_permissions .projects_change
113+ permission_required = ViewClassPermission (
114+ POST = all_permissions .storages_sync ,
115+ )
107116 parser_classes = (JSONParser , FormParser , MultiPartParser )
108117 serializer_class = ImportStorageSerializer
109118
@@ -125,7 +134,9 @@ def post(self, request, *args, **kwargs):
125134
126135class ExportStorageSyncAPI (generics .GenericAPIView ):
127136
128- permission_required = all_permissions .projects_change
137+ permission_required = ViewClassPermission (
138+ POST = all_permissions .storages_sync ,
139+ )
129140 parser_classes = (JSONParser , FormParser , MultiPartParser )
130141 serializer_class = ExportStorageSerializer
131142
@@ -147,7 +158,7 @@ def post(self, request, *args, **kwargs):
147158
148159class StorageValidateAPI (generics .CreateAPIView ):
149160
150- permission_required = all_permissions .projects_change
161+ permission_required = all_permissions .storages_change
151162 parser_classes = (JSONParser , FormParser , MultiPartParser )
152163
153164 def create (self , request , * args , ** kwargs ):
@@ -160,8 +171,7 @@ def create(self, request, *args, **kwargs):
160171@extend_schema (exclude = True )
161172class ImportStorageListFilesAPI (generics .CreateAPIView ):
162173
163- permission_required = all_permissions .projects_change
164- permission_classes = api_settings .DEFAULT_PERMISSION_CLASSES + [StoragePermission ]
174+ permission_required = all_permissions .storages_change
165175 parser_classes = (JSONParser , FormParser , MultiPartParser )
166176 serializer_class = None # Default serializer
167177
@@ -203,7 +213,7 @@ def create(self, request, *args, **kwargs):
203213@extend_schema (exclude = True )
204214class StorageFormLayoutAPI (generics .RetrieveAPIView ):
205215
206- permission_required = all_permissions .projects_change
216+ permission_required = all_permissions .storages_change
207217 parser_classes = (JSONParser , FormParser , MultiPartParser )
208218 storage_type = None
209219
0 commit comments