From c5eb9d4ee13857f1ea74a47d1ff1a8d30355c2d5 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Fri, 10 May 2013 15:33:26 +0200 Subject: [PATCH] OO-605: add a method in the VFS security callback to allow to create folder or not, disallow it for task > assignement --- .../collaboration/CollaborationTools.java | 5 ++++ .../components/FolderComponentRenderer.java | 29 ++++++++++++------- .../vfs/callbacks/FullAccessCallback.java | 5 ++++ .../FullAccessWithQuotaCallback.java | 5 ++++ .../util/vfs/callbacks/ReadOnlyCallback.java | 5 ++++ .../vfs/callbacks/VFSSecurityCallback.java | 6 ++++ .../VFSWebServiceSecurityCallback.java | 5 ++++ .../course/nodes/bc/FolderNodeCallback.java | 5 ++++ .../ProjectBrokerCourseEditorController.java | 5 ++++ ...ectBrokerDropboxScoringViewController.java | 3 ++ .../ta/DropboxScoringViewController.java | 4 +++ .../nodes/ta/TACourseNodeEditController.java | 5 ++++ .../SharedFolderSecurityCallback.java | 5 ++++ 13 files changed, 76 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/olat/collaboration/CollaborationTools.java b/src/main/java/org/olat/collaboration/CollaborationTools.java index 069ed53bb32..71ab79f992b 100644 --- a/src/main/java/org/olat/collaboration/CollaborationTools.java +++ b/src/main/java/org/olat/collaboration/CollaborationTools.java @@ -856,6 +856,11 @@ public class CollaborationTools implements Serializable { return write; } + @Override + public boolean canCreateFolder() { + return write; + } + public boolean canDelete() { return write; } diff --git a/src/main/java/org/olat/core/commons/modules/bc/components/FolderComponentRenderer.java b/src/main/java/org/olat/core/commons/modules/bc/components/FolderComponentRenderer.java index bc1645bcd75..84374fc7c12 100644 --- a/src/main/java/org/olat/core/commons/modules/bc/components/FolderComponentRenderer.java +++ b/src/main/java/org/olat/core/commons/modules/bc/components/FolderComponentRenderer.java @@ -94,6 +94,11 @@ public class FolderComponentRenderer implements ComponentRenderer { VFSContainer currentContainer = fc.getCurrentContainer(); boolean canWrite = currentContainer.canWrite() == VFSConstants.YES; + boolean canCreateFolder = true; + if(currentContainer.getLocalSecurityCallback() != null && !currentContainer.getLocalSecurityCallback().canCreateFolder()) { + canCreateFolder = false; + } + boolean canDelete = false; boolean canVersion = FolderConfig.versionsEnabled(fc.getCurrentContainer()); boolean canMail = fc.isCanMail(); @@ -167,18 +172,20 @@ public class FolderComponentRenderer implements ComponentRenderer { target.append(translator.translate("ul")); target.append("</a></li>"); - // option new folder - target.append("<li><a class=\"b_briefcase_newfolder\" href=\""); - ubu.buildURI(target, new String[] { VelocityContainer.COMMAND_ID }, new String[] { "cf" }, iframePostEnabled ? AJAXFlags.MODE_TOBGIFRAME : AJAXFlags.MODE_NORMAL); - target.append("\""); - if (iframePostEnabled) { // add ajax iframe target - StringOutput so = new StringOutput(); - ubu.appendTarget(so); - target.append(so.toString()); + if(canCreateFolder) { + // option new folder + target.append("<li><a class=\"b_briefcase_newfolder\" href=\""); + ubu.buildURI(target, new String[] { VelocityContainer.COMMAND_ID }, new String[] { "cf" }, iframePostEnabled ? AJAXFlags.MODE_TOBGIFRAME : AJAXFlags.MODE_NORMAL); + target.append("\""); + if (iframePostEnabled) { // add ajax iframe target + StringOutput so = new StringOutput(); + ubu.appendTarget(so); + target.append(so.toString()); + } + target.append(">"); + target.append(translator.translate("cf")); + target.append("</a></li>"); } - target.append(">"); - target.append(translator.translate("cf")); - target.append("</a></li>"); // option new file target.append("<li><a class=\"b_briefcase_newfile\" href=\""); diff --git a/src/main/java/org/olat/core/util/vfs/callbacks/FullAccessCallback.java b/src/main/java/org/olat/core/util/vfs/callbacks/FullAccessCallback.java index 2bd18c21f4e..b97736342a4 100644 --- a/src/main/java/org/olat/core/util/vfs/callbacks/FullAccessCallback.java +++ b/src/main/java/org/olat/core/util/vfs/callbacks/FullAccessCallback.java @@ -39,6 +39,11 @@ public class FullAccessCallback implements VFSSecurityCallback { return true; } + @Override + public boolean canCreateFolder() { + return true; + } + public boolean canDelete() { return true; } diff --git a/src/main/java/org/olat/core/util/vfs/callbacks/FullAccessWithQuotaCallback.java b/src/main/java/org/olat/core/util/vfs/callbacks/FullAccessWithQuotaCallback.java index 5101bc327f1..d4dc2e69dd7 100644 --- a/src/main/java/org/olat/core/util/vfs/callbacks/FullAccessWithQuotaCallback.java +++ b/src/main/java/org/olat/core/util/vfs/callbacks/FullAccessWithQuotaCallback.java @@ -51,6 +51,11 @@ public class FullAccessWithQuotaCallback implements VFSSecurityCallback { return true; } + @Override + public boolean canCreateFolder() { + return true; + } + public boolean canDelete() { return true; } diff --git a/src/main/java/org/olat/core/util/vfs/callbacks/ReadOnlyCallback.java b/src/main/java/org/olat/core/util/vfs/callbacks/ReadOnlyCallback.java index 587b6f5d3a9..ecfca7cfece 100644 --- a/src/main/java/org/olat/core/util/vfs/callbacks/ReadOnlyCallback.java +++ b/src/main/java/org/olat/core/util/vfs/callbacks/ReadOnlyCallback.java @@ -52,6 +52,11 @@ public class ReadOnlyCallback implements VFSSecurityCallback { return false; } + @Override + public boolean canCreateFolder() { + return false; + } + /** * @see org.olat.modules.bc.callbacks.SecurityCallback#canDelete(org.olat.modules.bc.Path) */ diff --git a/src/main/java/org/olat/core/util/vfs/callbacks/VFSSecurityCallback.java b/src/main/java/org/olat/core/util/vfs/callbacks/VFSSecurityCallback.java index 234fd752a9c..152982f470e 100644 --- a/src/main/java/org/olat/core/util/vfs/callbacks/VFSSecurityCallback.java +++ b/src/main/java/org/olat/core/util/vfs/callbacks/VFSSecurityCallback.java @@ -51,6 +51,12 @@ public interface VFSSecurityCallback { * @return True if writing is allowed. */ public boolean canWrite(); + + /** + * + * @return True if creating new folders is allowed + */ + public boolean canCreateFolder(); /** * @return True if deleting is allowed. diff --git a/src/main/java/org/olat/core/util/vfs/restapi/VFSWebServiceSecurityCallback.java b/src/main/java/org/olat/core/util/vfs/restapi/VFSWebServiceSecurityCallback.java index 671038cad48..f3d43b1b3d3 100644 --- a/src/main/java/org/olat/core/util/vfs/restapi/VFSWebServiceSecurityCallback.java +++ b/src/main/java/org/olat/core/util/vfs/restapi/VFSWebServiceSecurityCallback.java @@ -56,6 +56,11 @@ public class VFSWebServiceSecurityCallback implements VFSSecurityCallback { return canWrite; } + @Override + public boolean canCreateFolder() { + return canWrite; + } + @Override public boolean canDelete() { return canDelete; diff --git a/src/main/java/org/olat/course/nodes/bc/FolderNodeCallback.java b/src/main/java/org/olat/course/nodes/bc/FolderNodeCallback.java index 22b1fc1ea8e..8db430b9015 100644 --- a/src/main/java/org/olat/course/nodes/bc/FolderNodeCallback.java +++ b/src/main/java/org/olat/course/nodes/bc/FolderNodeCallback.java @@ -88,6 +88,11 @@ public class FolderNodeCallback implements VFSSecurityCallback { return ne.isCapabilityAccessible("upload") || isOlatAdmin; } + @Override + public boolean canCreateFolder() { + return canWrite(); + } + /** * @see org.olat.modules.bc.callbacks.SecurityCallback#canDelete(org.olat.modules.bc.Path) */ diff --git a/src/main/java/org/olat/course/nodes/projectbroker/ProjectBrokerCourseEditorController.java b/src/main/java/org/olat/course/nodes/projectbroker/ProjectBrokerCourseEditorController.java index 7aca8cc362d..7b4da992ba1 100644 --- a/src/main/java/org/olat/course/nodes/projectbroker/ProjectBrokerCourseEditorController.java +++ b/src/main/java/org/olat/course/nodes/projectbroker/ProjectBrokerCourseEditorController.java @@ -426,6 +426,11 @@ class FolderCallback implements VFSSecurityCallback { return !folderLocked; } + @Override + public boolean canCreateFolder() { + return !folderLocked; + } + /** * @see org.olat.modules.bc.callbacks.SecurityCallback#canDelete(org.olat.modules.bc.Path) */ diff --git a/src/main/java/org/olat/course/nodes/projectbroker/ProjectBrokerDropboxScoringViewController.java b/src/main/java/org/olat/course/nodes/projectbroker/ProjectBrokerDropboxScoringViewController.java index afccb20ca92..7c36b0e2237 100644 --- a/src/main/java/org/olat/course/nodes/projectbroker/ProjectBrokerDropboxScoringViewController.java +++ b/src/main/java/org/olat/course/nodes/projectbroker/ProjectBrokerDropboxScoringViewController.java @@ -125,6 +125,9 @@ class ReturnboxFullAccessCallback implements VFSSecurityCallback { * @see org.olat.modules.bc.callbacks.SecurityCallback#canWrite(org.olat.modules.bc.Path) */ public boolean canWrite() { return true; } + @Override + public boolean canCreateFolder() { return true; } + /** * @see org.olat.modules.bc.callbacks.SecurityCallback#canDelete(org.olat.modules.bc.Path) */ diff --git a/src/main/java/org/olat/course/nodes/ta/DropboxScoringViewController.java b/src/main/java/org/olat/course/nodes/ta/DropboxScoringViewController.java index 3439dc73f06..9cf2fbb5a96 100644 --- a/src/main/java/org/olat/course/nodes/ta/DropboxScoringViewController.java +++ b/src/main/java/org/olat/course/nodes/ta/DropboxScoringViewController.java @@ -373,6 +373,8 @@ class ReadOnlyAndDeleteCallback implements VFSSecurityCallback { * @see org.olat.modules.bc.callbacks.SecurityCallback#canWrite(org.olat.modules.bc.Path) */ public boolean canWrite() { return false; } + @Override + public boolean canCreateFolder() { return false; } /** * @see org.olat.modules.bc.callbacks.SecurityCallback#canDelete(org.olat.modules.bc.Path) */ @@ -428,6 +430,8 @@ class ReturnboxFullAccessCallback implements VFSSecurityCallback { * @see org.olat.modules.bc.callbacks.SecurityCallback#canWrite(org.olat.modules.bc.Path) */ public boolean canWrite() { return true; } + @Override + public boolean canCreateFolder() { return true; } /** * @see org.olat.modules.bc.callbacks.SecurityCallback#canDelete(org.olat.modules.bc.Path) */ diff --git a/src/main/java/org/olat/course/nodes/ta/TACourseNodeEditController.java b/src/main/java/org/olat/course/nodes/ta/TACourseNodeEditController.java index bf8fd148110..f25a2095f8e 100644 --- a/src/main/java/org/olat/course/nodes/ta/TACourseNodeEditController.java +++ b/src/main/java/org/olat/course/nodes/ta/TACourseNodeEditController.java @@ -639,6 +639,11 @@ class TaskFolderCallback implements VFSSecurityCallback { return !folderLocked; } + @Override + public boolean canCreateFolder() { + return false; + } + /** * @see org.olat.modules.bc.callbacks.SecurityCallback#canDelete(org.olat.modules.bc.Path) */ diff --git a/src/main/java/org/olat/repository/SharedFolderSecurityCallback.java b/src/main/java/org/olat/repository/SharedFolderSecurityCallback.java index 251b391bfed..768e186a86d 100644 --- a/src/main/java/org/olat/repository/SharedFolderSecurityCallback.java +++ b/src/main/java/org/olat/repository/SharedFolderSecurityCallback.java @@ -63,6 +63,11 @@ public class SharedFolderSecurityCallback implements VFSSecurityCallback { return true; } + @Override + public boolean canCreateFolder() { + return true; + } + /** * @return boolean */ -- GitLab