From c4feeb61571d0536bae082180733396e1c474908 Mon Sep 17 00:00:00 2001 From: Oleg Zharkov Date: Thu, 11 Feb 2021 18:14:48 +0100 Subject: [PATCH] working implementation --- .../LibraryFolderDatasetPermissions.vue | 108 +++++++++++++----- .../LibraryFolderPermissions.vue | 35 +++--- .../LibraryFolderPermissions/services.js | 22 ++-- client/src/components/LibraryFolder/icons.js | 4 +- 4 files changed, 103 insertions(+), 66 deletions(-) diff --git a/client/src/components/LibraryFolder/LibraryFolderPermissions/LibraryFolderDatasetPermissions.vue b/client/src/components/LibraryFolder/LibraryFolderPermissions/LibraryFolderDatasetPermissions.vue index c5abd0db36b..b4fce4bb3dc 100644 --- a/client/src/components/LibraryFolder/LibraryFolderPermissions/LibraryFolderDatasetPermissions.vue +++ b/client/src/components/LibraryFolder/LibraryFolderPermissions/LibraryFolderDatasetPermissions.vue @@ -1,21 +1,51 @@ @@ -64,7 +105,7 @@ import { Toast } from "ui/toast"; import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome"; import { getGalaxyInstance } from "app"; import PermissionsInputField from "./PermissionsInputField.vue"; -import { initManageFolderIcons } from "components/LibraryFolder/icons"; +import { initPermissionsIcons } from "components/LibraryFolder/icons"; import LibraryPermissionsWarning from "components/LibraryFolder/LibraryFolderPermissions/LibraryPermissionsWarning.vue"; import { extractRoles } from "./utils"; @@ -73,7 +114,7 @@ import VueObserveVisibility from "vue-observe-visibility"; Vue.use(VueObserveVisibility); Vue.use(BootstrapVue); -initManageFolderIcons(); +initPermissionsIcons(); export default { props: { @@ -99,9 +140,9 @@ export default { access_dataset_roles: undefined, modify_item_roles: undefined, manage_dataset_roles: undefined, - add_type: "add_type", - manage_type: "manage_type", - modify_type: "modify_type", + access_dataset_roles_type: "access_dataset_roles", + modify_item_roles_type: "modify_item_roles", + manage_dataset_roles_type: "manage_dataset_roles", apiRootUrl: `${getAppRoot()}api/libraries/datasets`, }; }, @@ -125,17 +166,26 @@ export default { return `${this.root}library/folders/${this.folder_id}`; }, setUserPermissionsPreferences(ids, permission_type) { - switch (permission_type) { - case "manage_type": - this.manage_folder_role_list = ids; - break; - case "add_type": - this.add_library_item_role_list = ids; - break; - case "modify_type": - this.modify_folder_role_list = ids; - break; - } + this[permission_type] = ids; + }, + postPermissions() { + this.services.setPermissions( + this.apiRootUrl, + this.dataset_id, + [ + { "access_ids[]": this.access_dataset_roles }, + { "modify_ids[]": this.modify_item_roles }, + { "manage_ids[]": this.manage_dataset_roles }, + ], + (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/LibraryFolderPermissions.vue b/client/src/components/LibraryFolder/LibraryFolderPermissions/LibraryFolderPermissions.vue index 8f1340681e2..7e6b3d6871a 100644 --- a/client/src/components/LibraryFolder/LibraryFolderPermissions/LibraryFolderPermissions.vue +++ b/client/src/components/LibraryFolder/LibraryFolderPermissions/LibraryFolderPermissions.vue @@ -2,8 +2,8 @@
- - 1 + +
{{ folder.name }}
@@ -76,10 +76,10 @@ import PermissionsInputField from "./PermissionsInputField.vue"; import LibraryPermissionsWarning from "components/LibraryFolder/LibraryFolderPermissions/LibraryPermissionsWarning.vue"; import { extractRoles } from "./utils"; -import { initManageFolderIcons } from "components/LibraryFolder/icons"; +import { initPermissionsIcons } from "components/LibraryFolder/icons"; Vue.use(BootstrapVue); -initManageFolderIcons(); +initPermissionsIcons(); export default { props: { @@ -101,9 +101,9 @@ export default { add_library_item_role_list: undefined, modify_folder_role_list: undefined, manage_folder_role_list: undefined, - add_type: "add_type", - manage_type: "manage_type", - modify_type: "modify_type", + add_type: "add_library_item_role_list", + manage_type: "manage_folder_role_list", + modify_type: "modify_folder_role_list", apiRootUrl: `${getAppRoot()}api/folders`, }; }, @@ -127,24 +127,17 @@ export default { return `${this.root}library/folders/${this.folder.parent_id}`; }, setUserPermissionsPreferences(ids, permission_type) { - switch (permission_type) { - case "manage_type": - this.manage_folder_role_list = ids; - break; - case "add_type": - this.add_library_item_role_list = ids; - break; - case "modify_type": - this.modify_folder_role_list = ids; - break; - } + this[permission_type] = ids; }, postPermissions() { this.services.setPermissions( + this.apiRootUrl, this.folder_id, - this.add_library_item_role_list, - this.manage_folder_role_list, - this.modify_folder_role_list, + [ + { "add_ids[]": this.add_library_item_role_list }, + { "manage_ids[]": this.manage_folder_role_list }, + { "modify_ids[]": this.modify_folder_role_list }, + ], (fetched_permissions) => { Toast.success("Permissions saved."); this.permissions = fetched_permissions; diff --git a/client/src/components/LibraryFolder/LibraryFolderPermissions/services.js b/client/src/components/LibraryFolder/LibraryFolderPermissions/services.js index 478c6cd4db7..30cdf881d22 100644 --- a/client/src/components/LibraryFolder/LibraryFolderPermissions/services.js +++ b/client/src/components/LibraryFolder/LibraryFolderPermissions/services.js @@ -54,24 +54,18 @@ export class Services { } } - async setPermissions(id, add_ids, manage_ids, modify_ids, onSuccess, onError) { + async setPermissions(apiRootUrl, id, new_roles_ids, onSuccess, onError) { var formData = new FormData(); - formData.append( - "add_ids[]", - add_ids.map((a) => a.id) - ); - formData.append( - "manage_ids[]", - manage_ids.map((a) => a.id) - ); - formData.append( - "modify_ids[]", - modify_ids.map((a) => a.id) - ); + new_roles_ids.forEach((permissionType) => { + Object.keys(permissionType).map(function (k) { + const ids = permissionType[k].map((a) => a.id); + formData.append(k, ids); + }); + }); axios({ method: "post", - url: `${getAppRoot()}api/folders/${id}/permissions?action=set_permissions`, + url: `${apiRootUrl}/${id}/permissions?action=set_permissions`, data: formData, headers: { "Content-Type": "multipart/form-data" }, }) diff --git a/client/src/components/LibraryFolder/icons.js b/client/src/components/LibraryFolder/icons.js index 3255459ffe5..5e4b08504d8 100644 --- a/client/src/components/LibraryFolder/icons.js +++ b/client/src/components/LibraryFolder/icons.js @@ -38,7 +38,7 @@ const tableIcons = [ faMinusSquare, ]; -const manageIcons = [faAngleDoubleLeft, faSave]; +const manageIcons = [faAngleDoubleLeft, faSave, faFile]; const topBarIcons = [faHome, faPlus, faInfoCircle, faTrash, faDownload, faBook]; export function initFolderTableIcons() { @@ -47,7 +47,7 @@ export function initFolderTableIcons() { }); } -export function initManageFolderIcons() { +export function initPermissionsIcons() { manageIcons.forEach((icon) => { library.add(icon); });