Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/OrgManageAction.java =================================================================== diff -u -ra961e120b9299bd497d18a4a9ee9163882c0a217 -re912ccae662b3d6064417e9a90a0eb9e83ee8b1b --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/OrgManageAction.java (.../OrgManageAction.java) (revision a961e120b9299bd497d18a4a9ee9163882c0a217) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/OrgManageAction.java (.../OrgManageAction.java) (revision e912ccae662b3d6064417e9a90a0eb9e83ee8b1b) @@ -154,8 +154,9 @@ orgManageForm.setOrgManageBeans(orgManageBeans); request.setAttribute("OrgManageForm",orgManageForm); // let the jsp know whether to display links - request.setAttribute("createOrEditGroup",request.isUserInRole(Role.SYSADMIN) + request.setAttribute("createGroup",request.isUserInRole(Role.SYSADMIN) || service.isUserGlobalGroupAdmin()); + request.setAttribute("editGroup", service.canEditGroup(userId, orgId)); request.setAttribute("manageGlobalRoles", request.isUserInRole(Role.SYSADMIN)); return mapping.findForward("orglist"); } Index: lams_admin/src/java/org/lamsfoundation/lams/admin/web/OrganisationAction.java =================================================================== diff -u -r91867eded7ee20f399144d4d9061d92723b70368 -re912ccae662b3d6064417e9a90a0eb9e83ee8b1b --- lams_admin/src/java/org/lamsfoundation/lams/admin/web/OrganisationAction.java (.../OrganisationAction.java) (revision 91867eded7ee20f399144d4d9061d92723b70368) +++ lams_admin/src/java/org/lamsfoundation/lams/admin/web/OrganisationAction.java (.../OrganisationAction.java) (revision e912ccae662b3d6064417e9a90a0eb9e83ee8b1b) @@ -28,9 +28,9 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.BeanUtils; -import org.apache.log4j.Logger; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; @@ -41,10 +41,13 @@ import org.lamsfoundation.lams.usermanagement.OrganisationType; import org.lamsfoundation.lams.usermanagement.Role; import org.lamsfoundation.lams.usermanagement.SupportedLocale; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.MessageService; import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.web.action.LamsDispatchAction; +import org.lamsfoundation.lams.web.session.SessionManager; +import org.lamsfoundation.lams.web.util.AttributeNames; /** * @author Fei Yang @@ -60,8 +63,6 @@ */ public class OrganisationAction extends LamsDispatchAction { - private static Logger log = Logger.getLogger(OrganisationAction.class); - private static IUserManagementService service; private static MessageService messageService; private static List locales; @@ -73,40 +74,65 @@ DynaActionForm orgForm = (DynaActionForm)form; Integer orgId = WebUtil.readIntParam(request,"orgId",true); - if(!(request.isUserInRole(Role.SYSADMIN) || service.isUserGlobalGroupAdmin())) { + HttpSession session = SessionManager.getSession(); + if (session != null) { + UserDTO userDto = (UserDTO)session.getAttribute(AttributeNames.USER); + if (userDto != null) { + Integer userId = userDto.getUserID(); + // sysadmin, global group admin, group manager, group admin can edit group + if (service.canEditGroup(userId, orgId)) { + // edit existing organisation + if (orgId != null){ + Organisation org = (Organisation)service.findById(Organisation.class,orgId); + BeanUtils.copyProperties(orgForm,org); + orgForm.set("parentId",org.getParentOrganisation().getOrganisationId()); + orgForm.set("parentName",org.getParentOrganisation().getName()); + orgForm.set("typeId",org.getOrganisationType().getOrganisationTypeId()); + orgForm.set("stateId",org.getOrganisationState().getOrganisationStateId()); + SupportedLocale locale = org.getLocale(); + orgForm.set("localeId",locale != null ? locale.getLocaleId() : null); + } + request.getSession().setAttribute("locales",locales); + request.getSession().setAttribute("status",status); + return mapping.findForward("organisation"); + } + } + } + + return error(mapping, request); + } + + public ActionForward create(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception{ + service = AdminServiceProxy.getService(getServlet().getServletContext()); + initLocalesAndStatus(); + DynaActionForm orgForm = (DynaActionForm)form; + + if(!(request.isUserInRole(Role.SYSADMIN) || service.isUserGlobalGroupAdmin())) { + // only sysadmins and global group admins can create groups if (orgForm.get("typeId")!=null && orgForm.get("typeId").equals(OrganisationType.COURSE_TYPE) || orgForm.get("typeId")==null) { - // only sysadmin and global group admin can create/edit groups - messageService = AdminServiceProxy.getMessageService(getServlet().getServletContext()); - request.setAttribute("errorName", "OrganisationAction"); - request.setAttribute("errorMessage", messageService.getMessage("error.authorisation")); - return mapping.findForward("error"); + return error(mapping, request); } } - if(orgId != null){//editing existing organisation - Organisation org = (Organisation)service.findById(Organisation.class,orgId); - BeanUtils.copyProperties(orgForm,org); - log.debug("Struts Populated orgId:"+(Integer)orgForm.get("orgId")); - orgForm.set("parentId",org.getParentOrganisation().getOrganisationId()); - orgForm.set("parentName",org.getParentOrganisation().getName()); - orgForm.set("typeId",org.getOrganisationType().getOrganisationTypeId()); - orgForm.set("stateId",org.getOrganisationState().getOrganisationStateId()); - SupportedLocale locale = org.getLocale(); - orgForm.set("localeId",locale != null ? locale.getLocaleId() : null); - } else { - // creating new organisation - orgForm.set("orgId", null); - Integer parentId = WebUtil.readIntParam(request,"parentId",true); - if (parentId!=null) { - Organisation parentOrg = (Organisation)service.findById(Organisation.class,parentId); - orgForm.set("parentName", parentOrg.getName()); - } + // creating new organisation + orgForm.set("orgId", null); + Integer parentId = WebUtil.readIntParam(request,"parentId",true); + if (parentId!=null) { + Organisation parentOrg = (Organisation)service.findById(Organisation.class,parentId); + orgForm.set("parentName", parentOrg.getName()); } request.getSession().setAttribute("locales",locales); request.getSession().setAttribute("status",status); return mapping.findForward("organisation"); } + + private ActionForward error(ActionMapping mapping, HttpServletRequest request) { + messageService = AdminServiceProxy.getMessageService(getServlet().getServletContext()); + request.setAttribute("errorName", "OrganisationAction"); + request.setAttribute("errorMessage", messageService.getMessage("error.authorisation")); + return mapping.findForward("error"); + } /*public ActionForward remove(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response){ Integer orgId = WebUtil.readIntParam(request,"orgId"); Index: lams_admin/web/orglist.jsp =================================================================== diff -u -rbfb15c51d80f7f35cbfd695d39f54a9799b6ea4b -re912ccae662b3d6064417e9a90a0eb9e83ee8b1b --- lams_admin/web/orglist.jsp (.../orglist.jsp) (revision bfb15c51d80f7f35cbfd695d39f54a9799b6ea4b) +++ lams_admin/web/orglist.jsp (.../orglist.jsp) (revision e912ccae662b3d6064417e9a90a0eb9e83ee8b1b) @@ -19,9 +19,9 @@

 

- + - + @@ -40,14 +40,14 @@

 

- +

' /> ' /> - + ' />

Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java =================================================================== diff -u -r6452b7bb53f1f0eb5a340fd488a733a9a6bd1415 -re912ccae662b3d6064417e9a90a0eb9e83ee8b1b --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision 6452b7bb53f1f0eb5a340fd488a733a9a6bd1415) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision e912ccae662b3d6064417e9a90a0eb9e83ee8b1b) @@ -448,4 +448,12 @@ * @return list of Users */ public List getUsersFromOrganisation(Integer orgId, Integer filteredOrgId); + + /** + * Tests whether user can edit the given org's details. + * @param userId + * @param orgId + * @return boolean + */ + public boolean canEditGroup(Integer userId, Integer orgId); } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java =================================================================== diff -u -r6452b7bb53f1f0eb5a340fd488a733a9a6bd1415 -re912ccae662b3d6064417e9a90a0eb9e83ee8b1b --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 6452b7bb53f1f0eb5a340fd488a733a9a6bd1415) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision e912ccae662b3d6064417e9a90a0eb9e83ee8b1b) @@ -1045,4 +1045,17 @@ + " order by uo.user.login"; return baseDAO.find(query); } + + public boolean canEditGroup(Integer userId, Integer orgId) { + if (isUserSysAdmin() || isUserGlobalGroupAdmin()) return true; + Organisation org = (Organisation)findById(Organisation.class, orgId); + if (org != null) { + if (org.getOrganisationType().getOrganisationTypeId().equals(OrganisationType.CLASS_TYPE)) { + Integer parentOrgId = org.getParentOrganisation().getOrganisationId(); + return (isUserInRole(userId, parentOrgId, Role.GROUP_ADMIN) + || (isUserInRole(userId, parentOrgId, Role.GROUP_MANAGER))); + } + } + return false; + } } \ No newline at end of file