Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r3769348f6b3ecb2ef712bd49fa42850f8c5b00d1 -r8511338e13292dc22334f9b15640687858919592 Binary files differ Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java =================================================================== diff -u -r3769348f6b3ecb2ef712bd49fa42850f8c5b00d1 -r8511338e13292dc22334f9b15640687858919592 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision 3769348f6b3ecb2ef712bd49fa42850f8c5b00d1) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision 8511338e13292dc22334f9b15640687858919592) @@ -313,4 +313,12 @@ */ public void disableUser(Integer userId); -} + /** + * Set the roles for the specified user and organisation using the roleIds in rolesList. + * If userOrganisation exists, will also remove roles that are not in rolesList. + * @param user + * @param org + * @param rolesList + */ + public void setRolesForUserOrganisation(User user, Organisation org, List rolesList); +} \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java =================================================================== diff -u -r3769348f6b3ecb2ef712bd49fa42850f8c5b00d1 -r8511338e13292dc22334f9b15640687858919592 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 3769348f6b3ecb2ef712bd49fa42850f8c5b00d1) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 8511338e13292dc22334f9b15640687858919592) @@ -25,6 +25,7 @@ import java.io.Serializable; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Date; import java.util.HashMap; @@ -612,4 +613,58 @@ save(user); } + /** + * (non-Javadoc) + * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#setRolesForUserOrganisation(org.lamsfoundation.lams.usermanagement.User, org.lamsfoundation.lams.usermanagement.Organisation, java.util.List) + */ + public void setRolesForUserOrganisation(User user, Organisation org, List rolesList) { + + UserOrganisation uo = getUserOrganisation(user.getUserId(), org.getOrganisationId()); + if (uo == null) { + uo = new UserOrganisation(user, org); + save(uo); + log.debug("added "+user.getLogin()+" to "+org.getName()); + Set uos = org.getUserOrganisations(); + uos.add(uo); + } + + List rolesCopy = new ArrayList(); + rolesCopy.addAll(rolesList); + log.debug("rolesList.size: " + rolesList.size()); + Set uors = uo.getUserOrganisationRoles(); + Set uorsCopy = new HashSet(); + if (uors != null) { + uorsCopy.addAll(uors); + // remove the common part from the rolesList and uors + // to get the uors to remove and the roles to add + for (String roleId : rolesList) { + for (UserOrganisationRole uor : uors) { + if (uor.getRole().getRoleId().toString().equals(roleId)) { + rolesCopy.remove(roleId); + uorsCopy.remove(uor); + log.debug("removing role: "+uor.getRole().getName()); + } + } + } + uors.removeAll(uorsCopy); + } else { + uors = new HashSet(); + } + for (String roleId : rolesCopy){ + Role role = (Role)findById(Role.class, Integer.parseInt(roleId)); + UserOrganisationRole uor = new UserOrganisationRole(uo, role); + save(uor); + log.debug("setting role: "+role.getName()); + uors.add(uor); + if (role.getName().equals(Role.AUTHOR)) { + if (user.getWorkspace()==null) { + createWorkspaceForUser(user); + } + } + } + uo.setUserOrganisationRoles(uors); + + save(user); + } + } \ No newline at end of file