From a0719278f50cc31f31a303cbdbcb7acaaa6b397e Mon Sep 17 00:00:00 2001 From: Oleg Zharkov Date: Fri, 29 Jan 2021 17:59:22 +0100 Subject: [PATCH] permission input fields as a sep component --- .../LibraryFolderPermissions.vue | 78 ++++++++++------- .../PermissionsInputField.vue | 85 +++++++++++++++++++ .../LibraryFolderPermissions/services.js | 22 ++++- 3 files changed, 152 insertions(+), 33 deletions(-) create mode 100644 client/src/components/LibraryFolder/LibraryFolderPermissions/PermissionsInputField.vue diff --git a/client/src/components/LibraryFolder/LibraryFolderPermissions/LibraryFolderPermissions.vue b/client/src/components/LibraryFolder/LibraryFolderPermissions/LibraryFolderPermissions.vue index c4fae4d6d27..e3dca804b09 100644 --- a/client/src/components/LibraryFolder/LibraryFolderPermissions/LibraryFolderPermissions.vue +++ b/client/src/components/LibraryFolder/LibraryFolderPermissions/LibraryFolderPermissions.vue @@ -33,18 +33,7 @@

Roles that can manage permissions on this folder

- - - +
User with any of these roles can manage permissions on this folder. @@ -52,14 +41,14 @@

Roles that can add items to this folder

-
+
User with any of these roles can add items to this folder (folders and datasets).

Roles that can modify this folder

-
+
User with any of these roles can modify this folder (name, etc.).
@@ -69,6 +58,7 @@ title="Save modifications" class="btn btn-secondary toolbtn_save_permissions primary-button" type="button" + @click="postPermissions" >  Save @@ -86,9 +76,12 @@ import Utils from "utils/utils"; import { Toast } from "ui/toast"; import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome"; import { getGalaxyInstance } from "app"; -import Multiselect from "vue-multiselect"; -import "vue-multiselect/dist/vue-multiselect.min.css"; +import PermissionsInputField from "./PermissionsInputField.vue"; +import "vue-multiselect/dist/vue-multiselect.min.css"; +import VueObserveVisibility from "vue-observe-visibility"; + +Vue.use(VueObserveVisibility); Vue.use(BootstrapVue); export default { @@ -99,15 +92,20 @@ export default { }, }, components: { - Multiselect, + PermissionsInputField, }, data() { return { - permissisons: undefined, + permissions: undefined, folder: undefined, is_admin: undefined, - options: { roles: [] }, value: null, + add_ids: [], + modify_ids: [], + manage_ids: [], + add_type: "add_type", + manage_type: "manage_type", + modify_type: "moddify_type", }; }, created() { @@ -117,27 +115,45 @@ export default { this.is_admin = Galaxy.user.attributes.is_admin; this.services.getFolderPermissions(this.folder_id).then((response) => { - this.permissisons = response; + this.permissions = response; }); this.services.getFolder(this.folder_id).then((response) => { this.folder = response; }); - this.getSelectOptions(); }, + methods: { - getSelectOptions() { - this.services.getSelectOptions(this.folder_id, true, 1).then((response) => { - console.log(response) - if (this.options.page > 1) { - this.options.roles.concat(response.roles); - } else { - this.options = response; - } - }); - }, getParentLink() { return `${this.root}library/folders/${this.folder.parent_id}`; }, + setUserPermissionsPreferences(ids, type) { + switch (type) { + case "manage": + this.manage_ids = ids; + break; + case "add": + this.add_ids = ids; + break; + case "modify": + this.modify_ids = ids; + break; + } + }, + postPermissions() { + this.services.setPermissions( + this.add_ids, + this.manage_ids, + this.modify_ids, + (fetched_permissions) => { + Toast.success("Permissions saved."); + this.permissions = fetched_permissions; + }, + (error) => { + Toast.error("An error occurred while attempting to set folder permissions."); + console.error(error); + } + ); + }, }, }; diff --git a/client/src/components/LibraryFolder/LibraryFolderPermissions/PermissionsInputField.vue b/client/src/components/LibraryFolder/LibraryFolderPermissions/PermissionsInputField.vue new file mode 100644 index 00000000000..5a3b5f4589c --- /dev/null +++ b/client/src/components/LibraryFolder/LibraryFolderPermissions/PermissionsInputField.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/client/src/components/LibraryFolder/LibraryFolderPermissions/services.js b/client/src/components/LibraryFolder/LibraryFolderPermissions/services.js index 7ef7f581279..77ed6121a87 100644 --- a/client/src/components/LibraryFolder/LibraryFolderPermissions/services.js +++ b/client/src/components/LibraryFolder/LibraryFolderPermissions/services.js @@ -25,8 +25,7 @@ export class Services { rethrowSimple(e); } } - async getSelectOptions(id, is_library_access, page, query) { - const page_limit = 10; + async getSelectOptions(id, is_library_access, page, page_limit, query) { const url = `${this.root}api/folders/${id}/permissions?scope=available&is_library_access=${is_library_access}&page_limit=${page_limit}&page=${page}`; try { const response = await axios.get(url); @@ -35,4 +34,23 @@ export class Services { rethrowSimple(e); } } + async setPermisions(access_ids, add_ids, manage_ids, modify_ids, onSuccess, onError) { + var formData = new FormData(); + formData.append("add_ids[]", access_ids); + formData.append("manage_ids[]", manage_ids); + formData.append("modify_ids[]", modify_ids); + + axios({ + method: "post", + url: "`${getAppRoot()}api/libraries/${self.id}/permissions?action=set_permissions`", + data: formData, + headers: { "Content-Type": "multipart/form-data" }, + }) + .then(function (response) { + onSuccess(response); + }) + .catch((response) => { + onError(response); + }); + } }