From e37fb05bd3c68979e8dca8f331a5a8246ba095ba Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Tue, 7 Feb 2012 16:48:03 +0100 Subject: [PATCH] OMA-54: add permission to folder group --- .../collaboration/CollaborationTools.java | 30 ++++++++++++++----- .../restapi/user/UserFoldersWebService.java | 9 ++++++ 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/olat/collaboration/CollaborationTools.java b/src/main/java/org/olat/collaboration/CollaborationTools.java index 4d268f6793e..6c8d189583d 100644 --- a/src/main/java/org/olat/collaboration/CollaborationTools.java +++ b/src/main/java/org/olat/collaboration/CollaborationTools.java @@ -52,6 +52,7 @@ import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.title.TitleInfo; import org.olat.core.gui.translator.Translator; +import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; import org.olat.core.id.context.BusinessControl; import org.olat.core.id.context.ContextEntry; @@ -369,15 +370,27 @@ public class CollaborationTools implements Serializable { // do not use a global translator since in the fututre a collaborationtools // may be shared among users Translator trans = Util.createPackageTranslator(this.getClass(), ureq.getLocale()); - String relPath = getFolderRelPath(); - OlatRootFolderImpl rootContainer = new OlatRootFolderImpl(relPath, null); + OlatRootFolderImpl rootContainer = getSecuredFolder(businessGroup, subsContext, ureq.getIdentity(), isAdmin); OlatNamedContainerImpl namedContainer = new OlatNamedContainerImpl(trans.translate("folder"), rootContainer); + FolderRunController frc = new FolderRunController(namedContainer, true, true, true, ureq, wControl); + return frc; + } + + /** + * Return the root VFS container with security callback set + * @return + */ + public OlatRootFolderImpl getSecuredFolder(BusinessGroup businessGroup, SubscriptionContext subsContext, Identity identity, boolean isAdmin) { + if(!isToolEnabled(CollaborationTools.TOOL_FOLDER)) { + return null; + } + //fxdiff VCRP-8: collaboration tools folder access control boolean writeAccess; - boolean isOwner = BaseSecurityManager.getInstance().isIdentityInSecurityGroup(ureq.getIdentity(), businessGroup.getOwnerGroup()); + boolean isOwner = BaseSecurityManager.getInstance().isIdentityInSecurityGroup(identity, businessGroup.getOwnerGroup()); if (!(isAdmin || isOwner)) { - // check if participants have read/write access + // check if participants have read/write access int folderAccess = CollaborationTools.FOLDER_ACCESS_ALL; Long lFolderAccess = CollaborationToolsFactory.getInstance().getOrCreateCollaborationTools(businessGroup).lookupFolderAccess(); if (lFolderAccess != null) { @@ -388,9 +401,11 @@ public class CollaborationTools implements Serializable { writeAccess = true; } - namedContainer.setLocalSecurityCallback(new CollabSecCallback(writeAccess, relPath, subsContext)); - FolderRunController frc = new FolderRunController(namedContainer, true, true, true, ureq, wControl); - return frc; + String relPath = getFolderRelPath(); + VFSSecurityCallback secCallback = new CollabSecCallback(writeAccess, relPath, subsContext); + OlatRootFolderImpl rootContainer = new OlatRootFolderImpl(relPath, null); + rootContainer.setLocalSecurityCallback(secCallback); + return rootContainer; } /** @@ -855,7 +870,6 @@ public class CollaborationTools implements Serializable { } private void archiveForum(OLATResourceable ores, String archivFilePath) { - ForumManager fom = ForumManager.getInstance(); Property forumKeyProperty = NarrowedPropertyManager.getInstance(ores).findProperty(null, null, PROP_CAT_BG_COLLABTOOLS, KEY_FORUM); if (forumKeyProperty != null) { VFSContainer archiveContainer = new LocalFolderImpl(new File(archivFilePath)); diff --git a/src/main/java/org/olat/restapi/user/UserFoldersWebService.java b/src/main/java/org/olat/restapi/user/UserFoldersWebService.java index 69b849bf7f2..a901a07f8d3 100644 --- a/src/main/java/org/olat/restapi/user/UserFoldersWebService.java +++ b/src/main/java/org/olat/restapi/user/UserFoldersWebService.java @@ -46,6 +46,7 @@ import javax.ws.rs.core.Response.Status; import org.olat.basesecurity.BaseSecurityManager; import org.olat.basesecurity.IdentityShort; import org.olat.collaboration.CollaborationTools; +import org.olat.collaboration.CollaborationToolsFactory; import org.olat.core.CoreSpringFactory; import org.olat.core.commons.modules.bc.BriefcaseWebDAVProvider; import org.olat.core.commons.modules.bc.FolderConfig; @@ -241,10 +242,18 @@ public class UserFoldersWebService { params.addTools(CollaborationTools.TOOL_FOLDER); List<BusinessGroup> groups = bgm.findBusinessGroups(params, retrievedUser, true, true, null, 0, -1); for(BusinessGroup group:groups) { + CollaborationTools tools = CollaborationToolsFactory.getInstance().getOrCreateCollaborationTools(group); + VFSContainer container = tools.getSecuredFolder(group, null, retrievedUser, false); + FolderVO folderVo = new FolderVO(); folderVo.setName(group.getName()); folderVo.setGroupKey(group.getKey()); folderVo.setSubscribed(groupNotified.containsKey(group.getKey())); + folderVo.setRead(container.getLocalSecurityCallback().canRead()); + folderVo.setList(container.getLocalSecurityCallback().canList()); + folderVo.setWrite(container.getLocalSecurityCallback().canWrite()); + folderVo.setDelete(container.getLocalSecurityCallback().canDelete()); + folderVOs.add(folderVo); } -- GitLab