From 33afb8c71f8517d1fa4ee536b1c82368e54e915e Mon Sep 17 00:00:00 2001 From: uhensler <urs.hensler@frentix.com> Date: Mon, 25 Mar 2019 10:31:00 +0100 Subject: [PATCH] OO-3940: Show documents in read-only modus for participants --- .../vfs/VFSLeafEditorSecurityCallback.java | 4 +++- .../VFSLeafEditorSecurityCallbackBuilder.java | 23 +++++++++++++++++++ .../java/org/olat/modules/wopi/Access.java | 2 ++ .../collabora/restapi/FilesWebService.java | 2 +- .../modules/wopi/manager/WopiServiceImpl.java | 1 + .../olat/modules/wopi/model/AccessImpl.java | 10 ++++++++ .../handlers/WebDocumentHandler.java | 3 ++- .../ui/WebDocumentRunController.java | 8 +++++-- 8 files changed, 48 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/olat/core/commons/services/vfs/VFSLeafEditorSecurityCallback.java b/src/main/java/org/olat/core/commons/services/vfs/VFSLeafEditorSecurityCallback.java index c81a818eba8..629f5530720 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/VFSLeafEditorSecurityCallback.java +++ b/src/main/java/org/olat/core/commons/services/vfs/VFSLeafEditorSecurityCallback.java @@ -27,6 +27,8 @@ package org.olat.core.commons.services.vfs; */ public interface VFSLeafEditorSecurityCallback { - boolean canClose(); + boolean canEdit(); + boolean canClose(); + } diff --git a/src/main/java/org/olat/core/commons/services/vfs/VFSLeafEditorSecurityCallbackBuilder.java b/src/main/java/org/olat/core/commons/services/vfs/VFSLeafEditorSecurityCallbackBuilder.java index 8ee811317a0..2743ff8f2f8 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/VFSLeafEditorSecurityCallbackBuilder.java +++ b/src/main/java/org/olat/core/commons/services/vfs/VFSLeafEditorSecurityCallbackBuilder.java @@ -27,8 +27,20 @@ package org.olat.core.commons.services.vfs; */ public class VFSLeafEditorSecurityCallbackBuilder { + private boolean canEdit = true; private boolean canClose = true; + /** + * Default: true + * + * @param canEdit + * @return + */ + public VFSLeafEditorSecurityCallbackBuilder canEdit(boolean canEdit) { + this.canEdit = canEdit; + return this; + } + /** * Default: true * @@ -42,6 +54,7 @@ public class VFSLeafEditorSecurityCallbackBuilder { public VFSLeafEditorSecurityCallback build() { VFSLeafEditorSecurityCallbackImpl secCallback = new VFSLeafEditorSecurityCallbackImpl(); + secCallback.setCanEdit(this.canEdit); secCallback.setCanClose(this.canClose); return secCallback; } @@ -55,8 +68,18 @@ public class VFSLeafEditorSecurityCallbackBuilder { private static class VFSLeafEditorSecurityCallbackImpl implements VFSLeafEditorSecurityCallback { + private boolean canEdit; private boolean canClose; + @Override + public boolean canEdit() { + return canEdit; + } + + private void setCanEdit(boolean canEdit) { + this.canEdit = canEdit; + } + @Override public boolean canClose() { return canClose; diff --git a/src/main/java/org/olat/modules/wopi/Access.java b/src/main/java/org/olat/modules/wopi/Access.java index 9abdae909b8..5fd9fcdc349 100644 --- a/src/main/java/org/olat/modules/wopi/Access.java +++ b/src/main/java/org/olat/modules/wopi/Access.java @@ -38,6 +38,8 @@ public interface Access { VFSMetadata getVfsMetadata(); + boolean canEdit(); + boolean canClose(); } diff --git a/src/main/java/org/olat/modules/wopi/collabora/restapi/FilesWebService.java b/src/main/java/org/olat/modules/wopi/collabora/restapi/FilesWebService.java index 99b62241d53..0d4a8745c9a 100644 --- a/src/main/java/org/olat/modules/wopi/collabora/restapi/FilesWebService.java +++ b/src/main/java/org/olat/modules/wopi/collabora/restapi/FilesWebService.java @@ -111,7 +111,7 @@ public class FilesWebService { .withUserFriendlyName(userManager.getUserDisplayName(access.getIdentity())) .withVersion(UUID.randomUUID().toString()) .withLastModifiedTime(getAsIso6801(metadata.getLastModified())) - .withUserCanWrite(Boolean.TRUE) + .withUserCanWrite(access.canEdit()) .withDisablePrint(Boolean.FALSE) .withUserCanNotWriteRelative(Boolean.TRUE) .build(); diff --git a/src/main/java/org/olat/modules/wopi/manager/WopiServiceImpl.java b/src/main/java/org/olat/modules/wopi/manager/WopiServiceImpl.java index 72410926553..d9074cd0fa0 100644 --- a/src/main/java/org/olat/modules/wopi/manager/WopiServiceImpl.java +++ b/src/main/java/org/olat/modules/wopi/manager/WopiServiceImpl.java @@ -105,6 +105,7 @@ public class WopiServiceImpl implements WopiService { access.setToken(token); access.setFileId(fileId); access.setIdentity(identity); + access.setCanEdit(secCallback.canEdit()); access.setCanClose(secCallback.canClose()); accessCache.put(token, access); return access; diff --git a/src/main/java/org/olat/modules/wopi/model/AccessImpl.java b/src/main/java/org/olat/modules/wopi/model/AccessImpl.java index bcab568e8ff..db13cba570f 100644 --- a/src/main/java/org/olat/modules/wopi/model/AccessImpl.java +++ b/src/main/java/org/olat/modules/wopi/model/AccessImpl.java @@ -34,6 +34,7 @@ public class AccessImpl implements Access { private String fileId; private String token; private Identity identity; + private boolean canEdit; private boolean canClose; private VFSMetadata vfsMetadata; @@ -64,6 +65,15 @@ public class AccessImpl implements Access { this.identity = identity; } + @Override + public boolean canEdit() { + return canEdit; + } + + public void setCanEdit(boolean canEdit) { + this.canEdit = canEdit; + } + @Override public boolean canClose() { return canClose; diff --git a/src/main/java/org/olat/repository/handlers/WebDocumentHandler.java b/src/main/java/org/olat/repository/handlers/WebDocumentHandler.java index 0c33500ff7b..9b4165cf806 100644 --- a/src/main/java/org/olat/repository/handlers/WebDocumentHandler.java +++ b/src/main/java/org/olat/repository/handlers/WebDocumentHandler.java @@ -249,7 +249,7 @@ public class WebDocumentHandler extends FileHandler { RepositoryEntry entry, RepositoryEntrySecurity rereSecurity, AssessmentMode assessmentMode) { CoreSpringFactory.getImpl(UserCourseInformationsManager.class) .updateUserCourseInformations(entry.getOlatResource(), uureq.getIdentity()); - return new WebDocumentRunController(uureq, wwControl, entry); + return new WebDocumentRunController(uureq, wwControl, entry, reSecurity); } }); } @@ -264,6 +264,7 @@ public class WebDocumentHandler extends FileHandler { return null; } + @Override protected String getDeletedFilePrefix() { return "del_webdoc_"; } diff --git a/src/main/java/org/olat/repository/ui/WebDocumentRunController.java b/src/main/java/org/olat/repository/ui/WebDocumentRunController.java index b044ea53198..c084aab2f57 100644 --- a/src/main/java/org/olat/repository/ui/WebDocumentRunController.java +++ b/src/main/java/org/olat/repository/ui/WebDocumentRunController.java @@ -51,6 +51,7 @@ import org.olat.core.util.vfs.VFSMediaResource; import org.olat.core.util.vfs.filters.VFSSystemItemFilter; import org.olat.fileresource.FileResourceManager; import org.olat.repository.RepositoryEntry; +import org.olat.repository.model.RepositoryEntrySecurity; import org.olat.resource.OLATResource; import org.springframework.beans.factory.annotation.Autowired; @@ -67,7 +68,8 @@ public class WebDocumentRunController extends BasicController { @Autowired private MovieService movieService; - public WebDocumentRunController(UserRequest ureq, WindowControl wControl, RepositoryEntry entry) { + public WebDocumentRunController(UserRequest ureq, WindowControl wControl, RepositoryEntry entry, + RepositoryEntrySecurity reSecurity) { super(ureq, wControl); VelocityContainer mainVC = createVelocityContainer("web_content"); @@ -100,10 +102,12 @@ public class WebDocumentRunController extends BasicController { mainVC.contextPut("width", 640); } } else if (vfsService.hasEditor(extension)) { + VFSLeafEditorSecurityCallback secCallback = VFSLeafEditorSecurityCallbackBuilder.builder() + .canEdit(reSecurity.isOwner() || reSecurity.isCoach()) + .build(); List<VFSLeafEditor> editors = vfsService.getEditors(document); if (editors.size() >= 1) { VFSLeafEditor editor = editors.get(0); - VFSLeafEditorSecurityCallback secCallback = VFSLeafEditorSecurityCallbackBuilder.builder().build(); // FolderComponent should be initialized to be safe. As of today the internal // editor does not support these file types. Controller editCtrl = editor.getRunController(ureq, wControl, document, null, getIdentity(), secCallback); -- GitLab