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):