diff --git a/src/components/BucketListItem.vue b/src/components/BucketListItem.vue index 05eb96632887c7ba0c31eeea08f68117cd00ba0c..cddcc0a6355069712147dc799a120ec5764d80b4 100644 --- a/src/components/BucketListItem.vue +++ b/src/components/BucketListItem.vue @@ -19,6 +19,7 @@ const props = defineProps<{ active: boolean; bucket: BucketOut; loading: boolean; + deletable: boolean; }>(); const randomIDSuffix = Math.random().toString(16).substr(2, 8); @@ -88,7 +89,7 @@ onMounted(() => { <span class="text-truncate" style="width: 80%">{{ bucket.name }}</span> <div> <bootstrap-icon - v-if="props.active && permission == null" + v-if="props.active && permission == null && props.deletable" icon="trash-fill" class="delete-icon me-2" :width="16" diff --git a/src/components/BucketView.vue b/src/components/BucketView.vue index 33cfd60c00950fe1e458a7fb90c7f5d6dc0bfb31..b4fa99f22a3ede32a08c97f1a1f8f26a2c6464dc 100644 --- a/src/components/BucketView.vue +++ b/src/components/BucketView.vue @@ -636,6 +636,7 @@ watch( /> <!-- Add bucket permission button --> <button + v-if="!authStore.foreignUser" :hidden="bucketRepository.getBucketPermission(props.bucketName) != null" type="button" class="btn btn-secondary m-2 tooltip-container" @@ -653,6 +654,7 @@ watch( <span class="visually-hidden">Add Bucket Permission</span> </button> <permission-modal + v-if="!authStore.foreignUser" modalID="create-permission-modal" :bucket-name="props.bucketName" :sub-folders="folderStructure" @@ -666,6 +668,7 @@ watch( " /> <button + v-if="!authStore.foreignUser" :hidden="bucketRepository.getBucketPermission(props.bucketName) != null" type="button" class="btn btn-secondary m-2 tooltip-container" @@ -683,7 +686,10 @@ watch( <span class="visually-hidden">View Bucket Permissions</span> </button> <permission-list-modal - v-if="bucketRepository.getBucketPermission(props.bucketName) == null" + v-if=" + bucketRepository.getBucketPermission(props.bucketName) == null && + !authStore.foreignUser + " :bucket-name="props.bucketName" :sub-folders="folderStructure" modalID="permission-list-modal" diff --git a/src/components/NavbarTop.vue b/src/components/NavbarTop.vue index 6404057442691adc4bb01f2cb192a66b2753502a..2f8132b6451238bb832827e41d67d95be05ccfb6 100644 --- a/src/components/NavbarTop.vue +++ b/src/components/NavbarTop.vue @@ -69,7 +69,7 @@ onBeforeUnmount(() => { height="24" class="d-inline-block align-text-top me-2" /> - S3 Proxy + CloWM </router-link> <button class="navbar-toggler" diff --git a/src/stores/auth.ts b/src/stores/auth.ts index b6774200f9cd37eb101de0b503652e70fd856c0a..8cc0dfdae780eda32dfaa1ac9ad7f2c6809cffcd 100644 --- a/src/stores/auth.ts +++ b/src/stores/auth.ts @@ -1,6 +1,6 @@ import { defineStore } from "pinia"; import type { User } from "@/client/auth"; -import { UserService } from "@/client/auth"; +import { UserService, RoleEnum } from "@/client/auth"; import { S3KeyService } from "@/client/s3proxy"; import type { S3Key } from "@/client/s3proxy"; import { OpenAPI as S3ProxyOpenAPI } from "@/client/s3proxy"; @@ -23,6 +23,15 @@ export const useAuthStore = defineStore({ } as RootState), getters: { authenticated: (state) => state.token != null, + foreignUser: (state) => + state.user?.roles?.includes(RoleEnum.FOREIGN_USER) ?? true, + normalUser: (state) => state.user?.roles?.includes(RoleEnum.USER) ?? false, + workflowReviewer: (state) => + state.user?.roles?.includes(RoleEnum.REVIEWER) ?? false, + workflowDev: (state) => + state.user?.roles?.includes(RoleEnum.DEVELOPER) ?? false, + workflowAdmin: (state) => + state.user?.roles?.includes(RoleEnum.ADMINISTRATOR) ?? false, }, actions: { setToken(token: string | null) { diff --git a/src/stores/buckets.ts b/src/stores/buckets.ts index 1da89ef4a1f7b2c6694e10eef4c777d93e0720f5..71da44638a75efb3ab4ed6bb89efa2b7d41858c5 100644 --- a/src/stores/buckets.ts +++ b/src/stores/buckets.ts @@ -52,7 +52,7 @@ export const useBucketStore = defineStore({ onFinally: (() => void) | null | undefined = null ) { const authStore = useAuthStore(); - if (authStore.user != null) { + if (authStore.user != null && !authStore.foreignUser) { BucketPermissionService.bucketPermissionListPermissionsPerUser( authStore.user.uid ) @@ -80,7 +80,8 @@ export const useBucketStore = defineStore({ onRejected: ((reason: any) => void) | null | undefined = null, onFinally: (() => void) | null | undefined = null ) { - BucketService.bucketListBuckets() + const authStore = useAuthStore(); + BucketService.bucketListBuckets(authStore.user?.uid) .then((buckets) => { this.buckets = buckets; onFulfilled?.(buckets); diff --git a/src/views/LoginView.vue b/src/views/LoginView.vue index 796abe477ed480c7397e501b57194a91a2946f7b..14337c434499bf79fbd8147f6ffb03c2c190f2db 100644 --- a/src/views/LoginView.vue +++ b/src/views/LoginView.vue @@ -60,7 +60,7 @@ onMounted(() => { <div class="card text-center bg-dark ms-md-auto position-fixed top-50 start-50 translate-middle" > - <div class="card-header text-dark bg-light">S3Proxy</div> + <div class="card-header text-dark bg-light">CloWM</div> <div class="card-body p-5"> <h5 class="card-title text-light">Login</h5> <p class="card-text text-secondary"> diff --git a/src/views/object-storage/BucketsView.vue b/src/views/object-storage/BucketsView.vue index 75900cade21b94cfda5dd847115a1c39b17ea02b..74b45aaa06aa15687ed835d001d751dbd4cfd7fc 100644 --- a/src/views/object-storage/BucketsView.vue +++ b/src/views/object-storage/BucketsView.vue @@ -9,10 +9,12 @@ import DeleteModal from "@/components/Modals/DeleteModal.vue"; import BucketListItem from "@/components/BucketListItem.vue"; import { useBucketStore } from "@/stores/buckets"; import { Modal } from "bootstrap"; +import { useAuthStore } from "@/stores/auth"; const route = useRoute(); const router = useRouter(); const bucketRepository = useBucketStore(); +const authStore = useAuthStore(); const bucketsState = reactive({ filterString: "", @@ -58,6 +60,7 @@ onMounted(() => { <template> <DeleteModal + v-if="!authStore.foreignUser" modalID="delete-bucket-modal" :object-name-delete="bucketsState.potentialDeleteBucketName" :back-modal-id="undefined" @@ -65,7 +68,10 @@ onMounted(() => { confirmedDeleteBucket(bucketsState.potentialDeleteBucketName) " /> - <CreateBucketModal modalID="create-bucket-modal" /> + <CreateBucketModal + modalID="create-bucket-modal" + v-if="!authStore.foreignUser" + /> <div class="row m-2 border-bottom border-light mt-4"> <div class="col-12"></div> <h1 class="mb-2 text-light">Buckets</h1> @@ -82,6 +88,7 @@ onMounted(() => { <span class="visually-hidden">Refresh Buckets</span> </button> <button + v-if="!authStore.foreignUser" type="button" class="btn btn-light" data-bs-toggle="modal" @@ -115,6 +122,7 @@ onMounted(() => { route.params.bucketName != null && route.params.bucketName === bucket.name " + :deletable="!authStore.foreignUser" :bucket="bucket" :loading="false" @delete-bucket="deleteBucket" @@ -140,6 +148,7 @@ onMounted(() => { :active="false" :loading="true" :permission="undefined" + :deletable="!authStore.foreignUser" :bucket="{ name: '', description: '',