Skip to content

Commit 0bbcb45

Browse files
committed
a quick experiment caching the results of .canIssuePublish...() and .canIssueSubmit...() taking into account a potential "files required" check.
1 parent 644795a commit 0bbcb45

1 file changed

Lines changed: 32 additions & 15 deletions

File tree

src/main/java/edu/harvard/iq/dataverse/PermissionsWrapper.java

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -267,34 +267,51 @@ public boolean canIssuePublishDatasetCommand(DvObject dvo){
267267
if (u.isSuperuser()) {
268268
return true;
269269
}
270-
// Return false if dataset has 0 files and user want to 'publish' or 'submit for review' and 'publish dataset requires files' flag is set
271-
if (dvo.isInstanceofDataset()) {
272-
Dataverse dv =((Dataset)dvo).getOwner();
273-
if (dv != null) {
274-
if (!datasetVersionService.hasFiles(((Dataset) dvo).getLatestVersion().getId()) && dv.getEffectiveRequiresFilesToPublishDataset()) {
275-
return false;
270+
if (checkDvoCacheForCommandAuthorization(dvo.getId(), PublishDatasetCommand.class, authUsersCommandMap) == null) {
271+
// Return false if dataset has 0 files and user want to 'publish' or 'submit for review' and 'publish dataset requires files' flag is set
272+
if (dvo.isInstanceofDataset()) {
273+
Dataverse dv = ((Dataset) dvo).getOwner();
274+
if (dv != null) {
275+
if (!datasetVersionService.hasFiles(((Dataset) dvo).getLatestVersion().getId()) && dv.getEffectiveRequiresFilesToPublishDataset()) {
276+
// it appears (?) to be safe caching the result; if a user
277+
// uploads more files within the same session, that re-renders
278+
// the page resulting in a new ViewScoped instance of this
279+
// wrapper.
280+
addCommandAuthorizationToDvoCache(dvo.getId(), PublishDatasetCommand.class, authUsersCommandMap, false);
281+
return false;
282+
}
276283
}
277284
}
285+
boolean canPublish = canIssueCommand(dvo, PublishDatasetCommand.class);
286+
addCommandAuthorizationToDvoCache(dvo.getId(), PublishDatasetCommand.class, authUsersCommandMap, canPublish);
278287
}
279-
return canIssueCommand(dvo, PublishDatasetCommand.class);
288+
return checkDvoCacheForCommandAuthorization(dvo.getId(), PublishDatasetCommand.class, authUsersCommandMap);
280289
}
281290

282291
// SUBMIT DATASET FOR REVIEW
283-
public boolean canIssueSubmitDatasetForReviewCommand(DvObject dvo){
292+
public boolean canIssueSubmitDatasetForReviewCommand(DvObject dvo) {
293+
284294
User u = session.getUser();
285295
if (u == null || u instanceof GuestUser) {
286296
return false; // guests can not submit for review
287297
}
288-
// Return false if dataset has 0 files and user want to 'publish' or 'submit for review' and 'publish dataset requires files' flag is set
289-
if (dvo.isInstanceofDataset()) {
290-
Dataverse dv =((Dataset)dvo).getOwner();
291-
if (dv != null) {
292-
if (!datasetVersionService.hasFiles(((Dataset) dvo).getLatestVersion().getId()) && dv.getEffectiveRequiresFilesToPublishDataset()) {
293-
return false;
298+
299+
if (checkDvoCacheForCommandAuthorization(dvo.getId(), SubmitDatasetForReviewCommand.class, authUsersCommandMap) == null) {
300+
// Return false if dataset has 0 files and user want to 'publish' or 'submit for review' and 'publish dataset requires files' flag is set
301+
if (dvo.isInstanceofDataset()) {
302+
Dataverse dv = ((Dataset) dvo).getOwner();
303+
if (dv != null) {
304+
if (!datasetVersionService.hasFiles(((Dataset) dvo).getLatestVersion().getId()) && dv.getEffectiveRequiresFilesToPublishDataset()) {
305+
// see the comment in canIssuePublishDataset() above
306+
addCommandAuthorizationToDvoCache(dvo.getId(), SubmitDatasetForReviewCommand.class, authUsersCommandMap, false);
307+
return false;
308+
}
294309
}
295310
}
311+
boolean canIssueSubmitForReview = canIssueCommand(dvo, SubmitDatasetForReviewCommand.class);
312+
addCommandAuthorizationToDvoCache(dvo.getId(), SubmitDatasetForReviewCommand.class, authUsersCommandMap, canIssueSubmitForReview);
296313
}
297-
return canIssueCommand(dvo, SubmitDatasetForReviewCommand.class);
314+
return checkDvoCacheForCommandAuthorization(dvo.getId(), SubmitDatasetForReviewCommand.class, authUsersCommandMap);
298315
}
299316

300317
// For the dataverse_header fragment (and therefore, most of the pages),

0 commit comments

Comments
 (0)