Skip to content

Commit a8fac19

Browse files
authored
Merge pull request #11801 from IQSS/11796-list-dataset-templates
Fix permissions on ListDataverseTemplatesCommand
2 parents e6af7be + ad76fd2 commit a8fac19

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
### Fixed: Permissions for `/{identifier}/templates` endpoint
2+
3+
The `/{identifier}/templates` endpoint previously required **`editDataverse`** permissions to retrieve the list of dataverse templates.
4+
5+
This has been corrected: the endpoint now requires **`addDataset`** permissions instead.
6+
7+
**Impact:**
8+
- The endpoint now works in scenarios such as the **Create Dataset form** in the SPA UI, without needing unnecessary elevated permissions.
9+
10+
Related issues: #11796

src/main/java/edu/harvard/iq/dataverse/engine/command/impl/ListDataverseTemplatesCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
/**
1515
* Lists the templates {@link Template} of a {@link Dataverse}.
1616
*/
17-
@RequiredPermissions(Permission.EditDataverse)
17+
@RequiredPermissions(Permission.AddDataset)
1818
public class ListDataverseTemplatesCommand extends AbstractCommand<List<Template>> {
1919

2020
private final Dataverse dataverse;

src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package edu.harvard.iq.dataverse.api;
22

3+
import edu.harvard.iq.dataverse.authorization.DataverseRole;
34
import edu.harvard.iq.dataverse.dataaccess.DataAccess;
45
import edu.harvard.iq.dataverse.util.json.JsonParseException;
56
import edu.harvard.iq.dataverse.util.json.JsonParser;
@@ -2596,9 +2597,12 @@ public void testUpdateInputLevelDisplayOnCreateOverride() {
25962597
public void testCreateAndGetTemplates() throws JsonParseException {
25972598
Response createUserResponse = UtilIT.createRandomUser();
25982599
String apiToken = UtilIT.getApiTokenFromResponse(createUserResponse);
2600+
String username = UtilIT.getUsernameFromResponse(createUserResponse);
25992601

26002602
Response createSecondUserResponse = UtilIT.createRandomUser();
26012603
String secondApiToken = UtilIT.getApiTokenFromResponse(createSecondUserResponse);
2604+
String secondUsername = UtilIT.getUsernameFromResponse(createSecondUserResponse);
2605+
26022606

26032607
/*
26042608
We need to make this a non-inherited metadatablocks so the get template will only get templates from current dv
@@ -2699,9 +2703,19 @@ public void testCreateAndGetTemplates() throws JsonParseException {
26992703
.body("data[0].instructions[0].instructionText", equalTo("The author data"))
27002704
.body("data[0].dataverseAlias", equalTo(dataverseAlias));
27012705

2702-
// Templates retrieval should fail if the user lacks dataverse edit permissions
2706+
// Templates retrieval should fail if a secondary user lacks dataset creation permissions
2707+
27032708
getTemplateResponse = UtilIT.getTemplates(dataverseAlias, secondApiToken);
27042709
getTemplateResponse.then().assertThat().statusCode(UNAUTHORIZED.getStatusCode());
2710+
2711+
// Templates retrieval should succeed if the secondary user has dataset creation permissions
2712+
2713+
UtilIT.setSuperuserStatus(username, true);
2714+
Response grantRoleResponse = UtilIT.grantRoleOnDataverse(dataverseAlias, DataverseRole.DS_CONTRIBUTOR, "@" + secondUsername, apiToken);
2715+
grantRoleResponse.then().assertThat().statusCode(OK.getStatusCode());
2716+
2717+
getTemplateResponse = UtilIT.getTemplates(dataverseAlias, secondApiToken);
2718+
getTemplateResponse.then().assertThat().statusCode(OK.getStatusCode());
27052719
}
27062720

27072721
@Test

0 commit comments

Comments
 (0)