@@ -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