This is an automated email from the ASF dual-hosted git repository.

machristie pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git


The following commit(s) were added to refs/heads/develop by this push:
     new e1f59acf AIRAVATA-3682 Fixing data product permission when in remote 
API mode
e1f59acf is described below

commit e1f59acfce3654300a0a4f6134b5d2fcb2356bf2
Author: Marcus Christie <[email protected]>
AuthorDate: Wed Feb 22 10:25:20 2023 -0500

    AIRAVATA-3682 Fixing data product permission when in remote API mode
---
 django_airavata/apps/api/serializers.py |  1 +
 django_airavata/apps/api/view_utils.py  | 11 +++++++++++
 2 files changed, 12 insertions(+)

diff --git a/django_airavata/apps/api/serializers.py 
b/django_airavata/apps/api/serializers.py
index f2339ea5..2bfefff5 100644
--- a/django_airavata/apps/api/serializers.py
+++ b/django_airavata/apps/api/serializers.py
@@ -576,6 +576,7 @@ class DataProductSerializer(
     def get_userHasWriteAccess(self, data_product: DataProductModel):
         request = self.context['request']
         file_metadata = user_storage.get_data_product_metadata(request, 
data_product=data_product)
+        # In remote API mode, "userHasWriteAccess" is returned so we just pass 
it through here
         if "userHasWriteAccess" in file_metadata:
             return file_metadata["userHasWriteAccess"]
         else:
diff --git a/django_airavata/apps/api/view_utils.py 
b/django_airavata/apps/api/view_utils.py
index a827434f..6b96662c 100644
--- a/django_airavata/apps/api/view_utils.py
+++ b/django_airavata/apps/api/view_utils.py
@@ -276,6 +276,17 @@ class 
DataProductSharedDirPermission(BaseSharedDirPermission):
         file_metadata = user_storage.get_data_product_metadata(request, 
data_product_uri=data_product_uri)
         return file_metadata["path"]
 
+    def has_permission(self, request, view):
+        # Special handling for remote API, just get the userHasWriteAccess 
attribute and use that
+        if hasattr(settings, 'GATEWAY_DATA_STORE_REMOTE_API'):
+            if request.method in permissions.SAFE_METHODS:
+                return True
+            data_product_uri = request.query_params.get('data-product-uri', 
request.query_params.get('product-uri', ''))
+            file_metadata = user_storage.get_data_product_metadata(request, 
data_product_uri=data_product_uri)
+            return file_metadata["userHasWriteAccess"]
+        else:
+            return super().has_permission(request, view)
+
 
 class UserStorageSharedDirPermission(BaseSharedDirPermission):
 

Reply via email to