From 5da565264e84eabe53df561334d72fa21a924932 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Tue, 19 Oct 2021 17:02:35 -0400 Subject: [PATCH 01/17] add permission definition --- .../edu/harvard/iq/dataverse/authorization/Permission.java | 4 +++- src/main/java/propertyFiles/Bundle.properties | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/authorization/Permission.java b/src/main/java/edu/harvard/iq/dataverse/authorization/Permission.java index 7fd7a40587f..ec52e764b4a 100644 --- a/src/main/java/edu/harvard/iq/dataverse/authorization/Permission.java +++ b/src/main/java/edu/harvard/iq/dataverse/authorization/Permission.java @@ -50,7 +50,9 @@ public enum Permission implements java.io.Serializable { PublishDataset(BundleUtil.getStringFromBundle("permission.publishDataset"), true, Dataset.class, Dataverse.class), // Delete DeleteDataverse(BundleUtil.getStringFromBundle("permission.deleteDataverse"), true, Dataverse.class), - DeleteDatasetDraft(BundleUtil.getStringFromBundle("permission.deleteDataset"), true, Dataset.class); + DeleteDatasetDraft(BundleUtil.getStringFromBundle("permission.deleteDataset"), true, Dataset.class), + //Update again + ManageFilePermissions(BundleUtil.getStringFromBundle("permission.managePermissionsDatasetFiles"), true, Dataset.class); // FUTURE: //RestrictMetadata("Mark metadata as restricted", DvObject.class), diff --git a/src/main/java/propertyFiles/Bundle.properties b/src/main/java/propertyFiles/Bundle.properties index 625602addcd..a0d5797d992 100644 --- a/src/main/java/propertyFiles/Bundle.properties +++ b/src/main/java/propertyFiles/Bundle.properties @@ -2175,6 +2175,7 @@ permission.downloadFile=Download a file permission.viewUnpublishedDataset=View an unpublished dataset and its files permission.viewUnpublishedDataverse=View an unpublished dataverse permission.addDatasetDataverse=Add a dataset to a dataverse +permission.managePermissionsDatasetFiles=Manage permissions for a dataset's file #DataverseUserPage.java userPage.informationUpdated=Your account information has been successfully updated. From af2291a23e9f21a80c774c2f2c311d36d5f2ea6a Mon Sep 17 00:00:00 2001 From: qqmyers Date: Thu, 21 Oct 2021 12:32:18 -0400 Subject: [PATCH 02/17] update to use ManageFilePermission --- .../edu/harvard/iq/dataverse/FileDownloadServiceBean.java | 2 +- .../edu/harvard/iq/dataverse/ManageFilePermissionsPage.java | 2 +- src/main/java/edu/harvard/iq/dataverse/api/Access.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/FileDownloadServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/FileDownloadServiceBean.java index 22bfc191921..8e12e7ca7bd 100644 --- a/src/main/java/edu/harvard/iq/dataverse/FileDownloadServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/FileDownloadServiceBean.java @@ -501,7 +501,7 @@ public boolean requestAccess(Long fileId) { } public void sendRequestFileAccessNotification(Dataset dataset, Long fileId, AuthenticatedUser requestor) { - permissionService.getUsersWithPermissionOn(Permission.ManageDatasetPermissions, dataset).stream().forEach((au) -> { + permissionService.getUsersWithPermissionOn(Permission.ManageFilePermissions, dataset).stream().forEach((au) -> { userNotificationService.sendNotification(au, new Timestamp(new Date().getTime()), UserNotification.Type.REQUESTFILEACCESS, fileId, null, requestor, false); }); diff --git a/src/main/java/edu/harvard/iq/dataverse/ManageFilePermissionsPage.java b/src/main/java/edu/harvard/iq/dataverse/ManageFilePermissionsPage.java index c728062a5a8..09f067f772c 100644 --- a/src/main/java/edu/harvard/iq/dataverse/ManageFilePermissionsPage.java +++ b/src/main/java/edu/harvard/iq/dataverse/ManageFilePermissionsPage.java @@ -136,7 +136,7 @@ public String init() { return permissionsWrapper.notFound(); } - if (!permissionService.on(dataset).has(Permission.ManageDatasetPermissions)) { + if (!permissionService.on(dataset).has(Permission.ManageFilePermissions)) { return permissionsWrapper.notAuthorized(); } initMaps(); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Access.java b/src/main/java/edu/harvard/iq/dataverse/api/Access.java index 9fd63a5fe04..cc146173d79 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Access.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Access.java @@ -1394,7 +1394,7 @@ public Response listFileAccessRequests(@PathParam("id") String fileToRequestAcce return error(BAD_REQUEST, BundleUtil.getStringFromBundle("access.api.fileAccess.failure.noUser", args)); } - if (!(dataverseRequest.getAuthenticatedUser().isSuperuser() || permissionService.requestOn(dataverseRequest, dataFile.getOwner()).has(Permission.ManageDatasetPermissions))) { + if (!(dataverseRequest.getAuthenticatedUser().isSuperuser() || permissionService.requestOn(dataverseRequest, dataFile.getOwner()).has(Permission.ManageFilePermissions))) { return error(BAD_REQUEST, BundleUtil.getStringFromBundle("access.api.rejectAccess.failure.noPermissions")); } @@ -1588,7 +1588,7 @@ public Response rejectFileAccess(@PathParam("id") String fileToRequestAccessId, return error(BAD_REQUEST, BundleUtil.getStringFromBundle("access.api.fileAccess.failure.noUser", args)); } - if (!(dataverseRequest.getAuthenticatedUser().isSuperuser() || permissionService.requestOn(dataverseRequest, dataFile.getOwner()).has(Permission.ManageDatasetPermissions))) { + if (!(dataverseRequest.getAuthenticatedUser().isSuperuser() || permissionService.requestOn(dataverseRequest, dataFile.getOwner()).has(Permission.ManageFilePermissions))) { return error(BAD_REQUEST, BundleUtil.getStringFromBundle("access.api.rejectAccess.failure.noPermissions")); } From 93a7b52920ef5672e7a62a26f275798b7ba1b648 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Thu, 21 Oct 2021 13:06:48 -0400 Subject: [PATCH 03/17] update curator role to add managefilepermission --- scripts/api/data/role-curator.json | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/api/data/role-curator.json b/scripts/api/data/role-curator.json index 2de5b2aefd1..91cb7ec43e2 100644 --- a/scripts/api/data/role-curator.json +++ b/scripts/api/data/role-curator.json @@ -9,6 +9,7 @@ "DeleteDatasetDraft", "PublishDataset", "ManageDatasetPermissions", + "ManageFilePermissions", "AddDataverse", "AddDataset", "ViewUnpublishedDataverse" From 7541c04e39ba31647dc72d22233ab1f5794ad653 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Thu, 21 Oct 2021 13:07:16 -0400 Subject: [PATCH 04/17] flyway script to add managefileperm to roles that have managedatasetperm --- .../db/migration/V5.7.0.1__8109-add-manage-files-permission.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 src/main/resources/db/migration/V5.7.0.1__8109-add-manage-files-permission.sql diff --git a/src/main/resources/db/migration/V5.7.0.1__8109-add-manage-files-permission.sql b/src/main/resources/db/migration/V5.7.0.1__8109-add-manage-files-permission.sql new file mode 100644 index 00000000000..8f73d56d699 --- /dev/null +++ b/src/main/resources/db/migration/V5.7.0.1__8109-add-manage-files-permission.sql @@ -0,0 +1,2 @@ +UPDATE dataverserole SET permissionbits=permissionbits + 8192 WHERE (permissionbits & 256 >0) AND (permissionbits & 8192 = 0); + From e7a5801595afc5dc94702b5290619b693369cec5 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Thu, 21 Oct 2021 13:48:59 -0400 Subject: [PATCH 05/17] add labels and flyway script name change --- src/main/java/propertyFiles/Bundle.properties | 3 +++ ...sion.sql => V5.7.0.2__8109-add-manage-files-permission.sql} | 0 2 files changed, 3 insertions(+) rename src/main/resources/db/migration/{V5.7.0.1__8109-add-manage-files-permission.sql => V5.7.0.2__8109-add-manage-files-permission.sql} (100%) diff --git a/src/main/java/propertyFiles/Bundle.properties b/src/main/java/propertyFiles/Bundle.properties index a0d5797d992..2efb1e65130 100644 --- a/src/main/java/propertyFiles/Bundle.properties +++ b/src/main/java/propertyFiles/Bundle.properties @@ -2479,6 +2479,7 @@ permission.PublishDataverse.label=PublishDataverse permission.PublishDataset.label=PublishDataset permission.DeleteDataverse.label=DeleteDataverse permission.DeleteDatasetDraft.label=DeleteDatasetDraft +permission.ManageFilePermissions.label=ManageFilePermissions permission.AddDataverse.desc=Add a dataverse within another dataverse permission.DeleteDatasetDraft.desc=Delete a dataset draft @@ -2493,6 +2494,8 @@ permission.DownloadFile.desc=Download a file permission.ViewUnpublishedDataset.desc=View an unpublished dataset and its files permission.ViewUnpublishedDataverse.desc=View an unpublished dataverse permission.AddDataset.desc=Add a dataset to a dataverse +permission.ManageFilePermissions.desc=Manage permissions for a file + packageDownload.title=Package File Download packageDownload.instructions=Use the Download URL in a Wget command or a download manager to download this package file. Download via web browser is not recommended. User Guide - Downloading a Dataverse Package via URL diff --git a/src/main/resources/db/migration/V5.7.0.1__8109-add-manage-files-permission.sql b/src/main/resources/db/migration/V5.7.0.2__8109-add-manage-files-permission.sql similarity index 100% rename from src/main/resources/db/migration/V5.7.0.1__8109-add-manage-files-permission.sql rename to src/main/resources/db/migration/V5.7.0.2__8109-add-manage-files-permission.sql From 4111ee33632458c016ba192bc1b7bc609c19db8a Mon Sep 17 00:00:00 2001 From: qqmyers Date: Thu, 21 Oct 2021 14:13:58 -0400 Subject: [PATCH 06/17] require manage file perm on file target --- .../iq/dataverse/engine/command/impl/AssignRoleCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/AssignRoleCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/AssignRoleCommand.java index b2af28befb5..95dca62c7f5 100644 --- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/AssignRoleCommand.java +++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/AssignRoleCommand.java @@ -76,7 +76,7 @@ public Map> getRequiredPermissions() { // for data file check permission on owning dataset return Collections.singletonMap("", defPoint instanceof Dataverse ? Collections.singleton(Permission.ManageDataversePermissions) - : Collections.singleton(Permission.ManageDatasetPermissions)); + : defPoint instanceof Dataset ? Collections.singleton(Permission.ManageDatasetPermissions) : Collections.singleton(Permission.ManageFilePermissions)); } @Override From 6736d377fc819bde46d4f2a5736be8a687b945e0 Mon Sep 17 00:00:00 2001 From: qqmyers Date: Thu, 21 Oct 2021 15:04:35 -0400 Subject: [PATCH 07/17] adjust set permissions menu --- .../java/edu/harvard/iq/dataverse/PermissionsWrapper.java | 4 +++- src/main/webapp/dataset.xhtml | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/PermissionsWrapper.java b/src/main/java/edu/harvard/iq/dataverse/PermissionsWrapper.java index 92892a7fe77..d255d2ec394 100644 --- a/src/main/java/edu/harvard/iq/dataverse/PermissionsWrapper.java +++ b/src/main/java/edu/harvard/iq/dataverse/PermissionsWrapper.java @@ -142,7 +142,9 @@ public boolean canUpdateDataset(DataverseRequest dr, Dataset dataset) { return doesSessionUserHaveDataSetPermission(dr, dataset, Permission.EditDataset); } - + public boolean canManageFilesOnDataset(Dataset dataset) { + return doesSessionUserHaveDataSetPermission(dvRequestService.getDataverseRequest(), dataset, Permission.ManageFilePermissions); + } /** * (Using Raman's implementation in DatasetPage - moving it here, so that diff --git a/src/main/webapp/dataset.xhtml b/src/main/webapp/dataset.xhtml index dffe8256eb8..2cfe72d69bf 100644 --- a/src/main/webapp/dataset.xhtml +++ b/src/main/webapp/dataset.xhtml @@ -374,18 +374,18 @@ - +
  • #{bundle['dataset.editBtn.itemLabel.permissions']}