diff --git a/src/components/BucketView.vue b/src/components/BucketView.vue index d83664eca24feef730642edfb75670b5c6f07b55..2d99c32c61fa092236fa7e652c6eb017ac4fa630 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 3172c713118d14930cac39486558398140c34edf..e62f8f9511fb794262c71bfe0befc09e533a8aa7 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(