From fc7beba7b7fa2658d4ad9c84ba75acf170093285 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20G=C3=B6bel?= <dgoebel@techfak.uni-bielefeld.de>
Date: Mon, 2 Jan 2023 16:46:39 +0100
Subject: [PATCH] Disable download and copy options for WRITE-only buckets

#30
---
 src/components/BucketView.vue | 6 +++++-
 src/stores/buckets.ts         | 5 +++++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/components/BucketView.vue b/src/components/BucketView.vue
index d83664e..2d99c32 100644
--- a/src/components/BucketView.vue
+++ b/src/components/BucketView.vue
@@ -283,6 +283,9 @@ const errorLoadingObjects: ComputedRef<boolean> = computed(
 const writableBucket: ComputedRef<boolean> = computed(() =>
   bucketRepository.writableBucket(props.bucketName)
 );
+const readableBucket: ComputedRef<boolean> = computed(() =>
+  bucketRepository.readableBucket(props.bucketName)
+);
 
 // Lifecycle Hooks
 // -----------------------------------------------------------------------------
@@ -799,6 +802,7 @@ watch(
                   type="button"
                   class="btn btn-secondary"
                   @click="downloadObject(obj.key, props.bucketName)"
+                  :disabled="!readableBucket"
                 >
                   Download
                 </button>
@@ -839,7 +843,7 @@ watch(
                     <button
                       class="dropdown-item"
                       type="button"
-                      :disabled="!writableBucket"
+                      :disabled="!writableBucket || !readableBucket"
                       data-bs-toggle="modal"
                       data-bs-target="#copy-object-modal"
                       @click="objectState.copyObject = obj"
diff --git a/src/stores/buckets.ts b/src/stores/buckets.ts
index 3172c71..e62f8f9 100644
--- a/src/stores/buckets.ts
+++ b/src/stores/buckets.ts
@@ -31,6 +31,11 @@ export const useBucketStore = defineStore({
         this.ownPermissions[bucketName] === undefined ||
         this.ownPermissions[bucketName].permission !== "READ";
     },
+    readableBucket(): (bucketName: string) => boolean {
+      return (bucketName) =>
+        this.ownPermissions[bucketName] === undefined ||
+        this.ownPermissions[bucketName].permission !== "WRITE";
+    },
   },
   actions: {
     _fetchOwnPermissions(
-- 
GitLab