Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r1454b2fd27486dd14b1ccf172b96df61a0b0d355 -rdf6deaa8ac6cd72359c5436608ab66b1b87529e0 Binary files differ Index: lams_central/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java =================================================================== diff -u -r1454b2fd27486dd14b1ccf172b96df61a0b0d355 -rdf6deaa8ac6cd72359c5436608ab66b1b87529e0 --- lams_central/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java (.../WorkspaceManagementService.java) (revision 1454b2fd27486dd14b1ccf172b96df61a0b0d355) +++ lams_central/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java (.../WorkspaceManagementService.java) (revision df6deaa8ac6cd72359c5436608ab66b1b87529e0) @@ -446,20 +446,15 @@ if ( workspaceFolder==null || user==null ) { permission = WorkspaceFolder.NO_ACCESS; - } else if (workspaceFolder.getUserID().equals(user.getUserId())) + } else if (workspaceFolder.getUserID().equals(user.getUserId())) { permission = WorkspaceFolder.OWNER_ACCESS; - else if (isSubFolder(workspaceFolder,userRootFolder)) - { - if(workspaceFolder.isRunSequencesFolder()) - permission = WorkspaceFolder.READ_ACCESS; - else - permission = WorkspaceFolder.OWNER_ACCESS; - } - else if(user.hasMemberAccess(workspaceFolder)) - permission = WorkspaceFolder.MEMBERSHIP_ACCESS; - else + } else if (isSubFolder(workspaceFolder,userRootFolder)) { + permission = WorkspaceFolder.OWNER_ACCESS; + } else if(user.hasMemberAccess(workspaceFolder)) { + permission = WorkspaceFolder.MEMBERSHIP_ACCESS; + } else { permission = WorkspaceFolder.NO_ACCESS; - + } return permission; } /** This method checks if the given workspaceFolder is a subFolder of the @@ -1219,15 +1214,14 @@ * access or not. */ private boolean hasWriteAccess(Set roles) { - boolean access = false; Iterator roleIterator = roles.iterator(); while (roleIterator.hasNext()) { UserOrganisationRole userOrganisationRole = (UserOrganisationRole) roleIterator.next(); Role role = userOrganisationRole.getRole(); if (role.isAuthor() || role.isStaff() || role.isTeacher()) - access = true; + return true; } - return access; + return false; } /** * This method moves a Learning Design from one workspace Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/User.java =================================================================== diff -u -r1454b2fd27486dd14b1ccf172b96df61a0b0d355 -rdf6deaa8ac6cd72359c5436608ab66b1b87529e0 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/User.java (.../User.java) (revision 1454b2fd27486dd14b1ccf172b96df61a0b0d355) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/User.java (.../User.java) (revision df6deaa8ac6cd72359c5436608ab66b1b87529e0) @@ -706,22 +706,51 @@ return false; } /** This method checks whether the user has membership access to - * the given workspaceFolder. Membership access means that the user + * the given workspaceFolder. Membership access means I am a member of the + * organisation relating to this folder (either as the root folder or a folder under + * the root folder). + * + * Membership access means that the user * has read and write access but cannot modify anybody else's content/stuff **/ public boolean hasMemberAccess(WorkspaceFolder workspaceFolder){ + boolean foundMemberFolder = false; Integer workspaceFolderID = workspaceFolder != null ? workspaceFolder.getWorkspaceFolderId() : null; if ( workspaceFolderID != null ) { Iterator iterator = this.userOrganisations.iterator(); - while(iterator.hasNext()){ - UserOrganisation userOrganisation = (UserOrganisation)iterator.next(); - Integer folderID = userOrganisation.getOrganisation().getWorkspace().getRootFolder().getWorkspaceFolderId(); - return ( workspaceFolderID.equals(folderID) ); + while(iterator.hasNext() && ! foundMemberFolder){ + UserOrganisation userOrganisation = (UserOrganisation)iterator.next(); + // not all orgs have a folder + Workspace workspace = userOrganisation.getOrganisation().getWorkspace(); + if ( workspace != null ) { + foundMemberFolder = checkFolders(workspace.getRootFolder(),workspaceFolderID); + } } } - return false; + return foundMemberFolder; } + private boolean checkFolders(WorkspaceFolder folder, Integer desiredWorkspaceFolderId) { + boolean foundMemberFolder = false; + if ( folder != null ) { + Integer folderID = folder.getWorkspaceFolderId(); + if ( folderID.equals(desiredWorkspaceFolderId) ) { + foundMemberFolder = true; + } else { + Set childFolders = folder.getChildWorkspaceFolders(); + if ( childFolders != null ) { + Iterator iter = childFolders.iterator(); + while (iter.hasNext() && !foundMemberFolder) { + WorkspaceFolder child = (WorkspaceFolder) iter.next(); + foundMemberFolder = checkFolders(child, desiredWorkspaceFolderId); + } + } + } + + } + return foundMemberFolder; + } + /** * @hibernate.property column="locale_country" length="2" * @param localeCountry Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/WorkspaceFolder.java =================================================================== diff -u -r34b959260a0f8f8285793a4481a95ca3580eabc5 -rdf6deaa8ac6cd72359c5436608ab66b1b87529e0 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/WorkspaceFolder.java (.../WorkspaceFolder.java) (revision 34b959260a0f8f8285793a4481a95ca3580eabc5) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/WorkspaceFolder.java (.../WorkspaceFolder.java) (revision df6deaa8ac6cd72359c5436608ab66b1b87529e0) @@ -378,8 +378,4 @@ this.folderContent.add(workspaceFolderContent); } - /** Is this folder a run sequences folder? */ - public boolean isRunSequencesFolder() { - return workspaceFolderType.equals(RUN_SEQUENCES); - } }