Skip to content

Commit e0b4f5d

Browse files
committed
Added new storage_* permissions
1 parent 4839893 commit e0b4f5d

File tree

5 files changed

+38
-36
lines changed

5 files changed

+38
-36
lines changed

label_studio/core/permissions.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ class AllPermissions(BaseModel):
4949
webhooks_change: str = 'webhooks.change'
5050
users_token_any: str = 'users.token.any'
5151

52+
storages_view: str = 'storages.view'
53+
storages_change: str = 'storages.change'
54+
storages_sync: str = 'storages.sync'
55+
5256

5357
all_permissions = AllPermissions()
5458

label_studio/core/settings/base.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -630,7 +630,6 @@
630630
TASK_SERIALIZER_BULK = 'tasks.serializers.BaseTaskSerializerBulk'
631631
PREPROCESS_FIELD_NAME = 'data_manager.functions.preprocess_field_name'
632632
INTERACTIVE_DATA_SERIALIZER = 'data_export.serializers.BaseExportDataSerializerForInteractive'
633-
STORAGE_PERMISSION = 'io_storages.permissions.StoragePermission'
634633
PROJECT_IMPORT_PERMISSION = 'projects.permissions.ProjectImportPermission'
635634
DELETE_TASKS_ANNOTATIONS_POSTPROCESS = None
636635
FEATURE_FLAGS_GET_USER_REPR = 'core.feature_flags.utils.get_user_repr'

label_studio/io_storages/all_api.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def _get_common_storage_list():
6969
),
7070
)
7171
class AllImportStorageTypesAPI(APIView):
72-
permission_required = all_permissions.projects_change
72+
permission_required = all_permissions.storages_view
7373

7474
def get(self, request, **kwargs):
7575
return Response([{'name': s['name'], 'title': s['title']} for s in _common_storage_list])
@@ -104,7 +104,7 @@ def get(self, request, **kwargs):
104104
),
105105
)
106106
class AllExportStorageTypesAPI(APIView):
107-
permission_required = all_permissions.projects_change
107+
permission_required = all_permissions.storages_view
108108

109109
def get(self, request, **kwargs):
110110
return Response([{'name': s['name'], 'title': s['title']} for s in _common_storage_list])
@@ -126,7 +126,7 @@ def get(self, request, **kwargs):
126126
)
127127
class AllImportStorageListAPI(generics.ListAPIView):
128128
parser_classes = (JSONParser, FormParser, MultiPartParser)
129-
permission_required = all_permissions.projects_change
129+
permission_required = all_permissions.storages_view
130130

131131
def _get_response(self, api, request, *args, **kwargs):
132132
try:
@@ -164,7 +164,7 @@ def list(self, request, *args, **kwargs):
164164
class AllExportStorageListAPI(generics.ListAPIView):
165165

166166
parser_classes = (JSONParser, FormParser, MultiPartParser)
167-
permission_required = all_permissions.projects_change
167+
permission_required = all_permissions.storages_view
168168

169169
def _get_response(self, api, request, *args, **kwargs):
170170
try:

label_studio/io_storages/api.py

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import os
66
import time
77

8-
from core.permissions import all_permissions
8+
from core.permissions import ViewClassPermission, all_permissions
99
from core.utils.io import read_yaml
1010
from django.conf import settings
1111
from drf_spectacular.utils import extend_schema
@@ -15,18 +15,15 @@
1515
from rest_framework.exceptions import NotFound, ValidationError
1616
from rest_framework.parsers import FormParser, JSONParser, MultiPartParser
1717
from 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

2219
logger = logging.getLogger(__name__)
2320

24-
StoragePermission = load_func(settings.STORAGE_PERMISSION)
25-
2621

2722
class 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):
4643
class 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

5960
class 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):
9194
class 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

104111
class 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

126135
class 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

148159
class 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)
161172
class 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)
204214
class 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

label_studio/io_storages/permissions.py

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)