Skip to content

Commit 7284ba8

Browse files
author
Nikita Manovich
committed
Fixed a problem with observer (check_object_permissions method was not called)
1 parent 8e7a758 commit 7284ba8

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

cvat/apps/engine/views.py

+10-8
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ def get_permissions(self):
187187
permissions.append(auth.TaskAccessPermission)
188188
elif http_method in ["POST"]:
189189
permissions.append(auth.TaskCreatePermission)
190-
elif http_method in ["PATCH", "PUT"]:
190+
elif self.action == 'annotations' or http_method in ["PATCH", "PUT"]:
191191
permissions.append(auth.TaskChangePermission)
192192
elif http_method in ["DELETE"]:
193193
permissions.append(auth.TaskDeletePermission)
@@ -207,9 +207,9 @@ def perform_destroy(self, instance):
207207
super().perform_destroy(instance)
208208
shutil.rmtree(task_dirname, ignore_errors=True)
209209

210-
@staticmethod
211210
@action(detail=True, methods=['GET'], serializer_class=JobSerializer)
212-
def jobs(request, pk):
211+
def jobs(self, request, pk):
212+
self.get_object() # force to call check_object_permissions
213213
queryset = Job.objects.filter(segment__task_id=pk)
214214
serializer = JobSerializer(queryset, many=True,
215215
context={"request": request})
@@ -218,7 +218,7 @@ def jobs(request, pk):
218218

219219
@action(detail=True, methods=['POST'], serializer_class=TaskDataSerializer)
220220
def data(self, request, pk):
221-
db_task = self.get_object()
221+
db_task = self.get_object() # call check_object_permissions as well
222222
serializer = TaskDataSerializer(db_task, data=request.data)
223223
if serializer.is_valid(raise_exception=True):
224224
serializer.save()
@@ -228,6 +228,7 @@ def data(self, request, pk):
228228
@action(detail=True, methods=['GET', 'DELETE', 'PUT', 'PATCH'],
229229
serializer_class=LabeledDataSerializer)
230230
def annotations(self, request, pk):
231+
self.get_object() # force to call check_object_permissions
231232
if request.method == 'GET':
232233
data = annotation.get_task_data(pk, request.user)
233234
serializer = LabeledDataSerializer(data=data)
@@ -267,7 +268,7 @@ def annotations(self, request, pk):
267268
def dump(self, request, pk, filename):
268269
filename = re.sub(r'[\\/*?:"<>|]', '_', filename)
269270
username = request.user.username
270-
db_task = self.get_object()
271+
db_task = self.get_object() # call check_object_permissions as well
271272
timestamp = datetime.now().strftime("%Y_%m_%d_%H_%M_%S")
272273
action = request.query_params.get("action")
273274
if action not in [None, "download"]:
@@ -325,6 +326,7 @@ def dump(self, request, pk, filename):
325326

326327
@action(detail=True, methods=['GET'], serializer_class=RqStatusSerializer)
327328
def status(self, request, pk):
329+
self.get_object() # force to call check_object_permissions
328330
response = self._get_rq_response(queue="default",
329331
job_id="/api/{}/tasks/{}".format(request.version, pk))
330332
serializer = RqStatusSerializer(data=response)
@@ -350,12 +352,11 @@ def _get_rq_response(queue, job_id):
350352

351353
return response
352354

353-
@staticmethod
354355
@action(detail=True, methods=['GET'], serializer_class=ImageMetaSerializer,
355356
url_path='frames/meta')
356-
def data_info(request, pk):
357+
def data_info(self, request, pk):
357358
try:
358-
db_task = models.Task.objects.get(pk=pk)
359+
db_task = self.get_object() # call check_object_permissions as well
359360
meta_cache_file = open(db_task.get_image_meta_cache_path())
360361
except OSError:
361362
task.make_image_meta_cache(db_task)
@@ -404,6 +405,7 @@ def get_permissions(self):
404405
@action(detail=True, methods=['GET', 'DELETE', 'PUT', 'PATCH'],
405406
serializer_class=LabeledDataSerializer)
406407
def annotations(self, request, pk):
408+
self.get_object() # force to call check_object_permissions
407409
if request.method == 'GET':
408410
data = annotation.get_job_data(pk, request.user)
409411
return Response(data)

0 commit comments

Comments
 (0)