From 8cf57443eb01de9ac00649c119d252d62348e10e Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Thu, 4 Jun 2015 12:34:29 +0200 Subject: [PATCH] OO-1562,OO-1563: add a member management right to the list of course rights and restricts the access to the function of the course members management in function of the administration/group/member rights --- .../course/groupsandrights/CourseRights.java | 5 + .../_i18n/LocalStrings_de.properties | 1 + .../_i18n/LocalStrings_en.properties | 1 + .../MembersManagementMainController.java | 104 +++++++++++------- .../course/run/CourseRuntimeController.java | 12 +- 5 files changed, 79 insertions(+), 44 deletions(-) diff --git a/src/main/java/org/olat/course/groupsandrights/CourseRights.java b/src/main/java/org/olat/course/groupsandrights/CourseRights.java index 28934e391c2..2a10e242e5a 100644 --- a/src/main/java/org/olat/course/groupsandrights/CourseRights.java +++ b/src/main/java/org/olat/course/groupsandrights/CourseRights.java @@ -47,6 +47,8 @@ public class CourseRights { /** course right for groupmanagement */ public static final String RIGHT_GROUPMANAGEMENT = BGRightManager.BG_RIGHT_PREFIX + "groupmngt"; + /** course right for groupmanagement */ + public static final String RIGHT_MEMBERMANAGEMENT = BGRightManager.BG_RIGHT_PREFIX + "membermngt"; /** course right for course editor */ public static final String RIGHT_COURSEEDITOR = BGRightManager.BG_RIGHT_PREFIX + "editor"; /** course right for archive tool */ @@ -68,6 +70,7 @@ public class CourseRights { // initialize list of valid course rights rights = new ArrayList<String>(); rights.add(RIGHT_GROUPMANAGEMENT); + rights.add(RIGHT_MEMBERMANAGEMENT); rights.add(RIGHT_COURSEEDITOR); rights.add(RIGHT_ARCHIVING); rights.add(RIGHT_ASSESSMENT); @@ -95,6 +98,7 @@ public class CourseRights { "", RIGHT_ASSESSMENT, RIGHT_GROUPMANAGEMENT, + RIGHT_MEMBERMANAGEMENT, RIGHT_COURSEEDITOR, RIGHT_ARCHIVING, RIGHT_GLOSSARY, @@ -112,6 +116,7 @@ public class CourseRights { trans.translate("noRestriction"), trans.translate(RIGHT_ASSESSMENT), trans.translate(RIGHT_GROUPMANAGEMENT), + trans.translate(RIGHT_MEMBERMANAGEMENT), trans.translate(RIGHT_COURSEEDITOR), trans.translate(RIGHT_ARCHIVING), trans.translate(RIGHT_GLOSSARY), diff --git a/src/main/java/org/olat/course/groupsandrights/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/groupsandrights/_i18n/LocalStrings_de.properties index cbae90dbb89..818baf8fdf8 100644 --- a/src/main/java/org/olat/course/groupsandrights/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/course/groupsandrights/_i18n/LocalStrings_de.properties @@ -4,6 +4,7 @@ bgr.assess=Bewertungs-Werkzeug bgr.editor=Kurseditor bgr.glossary=Glossar-Werkzeug bgr.groupmngt=Gruppen-Verwaltung +bgr.membermngt=Mitglieder-Verwaltung bgr.statistics=Statistiken noRestriction=Keine Einschr\u00E4nkung bgr.dbs=Kurs Datenbank diff --git a/src/main/java/org/olat/course/groupsandrights/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/groupsandrights/_i18n/LocalStrings_en.properties index a4c7038181e..4bc9a88238e 100644 --- a/src/main/java/org/olat/course/groupsandrights/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/course/groupsandrights/_i18n/LocalStrings_en.properties @@ -6,6 +6,7 @@ bgr.dbs=Course database bgr.editor=Course editor bgr.glossary=Glossary tool bgr.groupmngt=Group management +bgr.membermngt=Members management bgr.statistics=Statistics menu.rights=Rights noRestriction=No restriction diff --git a/src/main/java/org/olat/course/member/MembersManagementMainController.java b/src/main/java/org/olat/course/member/MembersManagementMainController.java index 291998ea7a1..62022cae1b5 100644 --- a/src/main/java/org/olat/course/member/MembersManagementMainController.java +++ b/src/main/java/org/olat/course/member/MembersManagementMainController.java @@ -82,15 +82,21 @@ public class MembersManagementMainController extends MainLayoutBasicController private boolean membersDirty; private RepositoryEntry repoEntry; + private final boolean entryAdmin, groupManagementRight, memberManagementRight; + @Autowired private ACService acService; @Autowired private AccessControlModule acModule; - public MembersManagementMainController(UserRequest ureq, WindowControl wControl, TooledStackedPanel toolbarPanel, RepositoryEntry re) { + public MembersManagementMainController(UserRequest ureq, WindowControl wControl, TooledStackedPanel toolbarPanel, + RepositoryEntry re, boolean entryAdmin, boolean groupManagementRight, boolean memberManagementRight) { super(ureq, wControl); this.repoEntry = re; this.toolbarPanel = toolbarPanel; + this.entryAdmin = entryAdmin; + this.groupManagementRight = groupManagementRight; + this.memberManagementRight = memberManagementRight; //logging getUserActivityLogger().setStickyActionType(ActionType.admin); @@ -109,7 +115,11 @@ public class MembersManagementMainController extends MainLayoutBasicController listenTo(columnLayoutCtr); putInitialPanel(columnLayoutCtr.getInitialComponent()); - selectMenuItem(ureq, CMD_MEMBERS); + if(entryAdmin || memberManagementRight) { + selectMenuItem(ureq, CMD_MEMBERS); + } else if(groupManagementRight) { + selectMenuItem(ureq, CMD_GROUPS); + } } private GenericTreeModel buildTreeModel() { @@ -119,31 +129,37 @@ public class MembersManagementMainController extends MainLayoutBasicController root.setAltText(translate("menu.members.alt")); gtm.setRootNode(root); - GenericTreeNode node = new GenericTreeNode(translate("menu.members"), CMD_MEMBERS); - node.setAltText(translate("menu.members.alt")); - node.setCssClass("o_sel_membersmgt_members"); - root.addChild(node); - - node = new GenericTreeNode(translate("menu.groups"), CMD_GROUPS); - node.setAltText(translate("menu.groups.alt")); - node.setCssClass("o_sel_membersmgt_groups"); - root.addChild(node); + if(entryAdmin || memberManagementRight) { + GenericTreeNode node = new GenericTreeNode(translate("menu.members"), CMD_MEMBERS); + node.setAltText(translate("menu.members.alt")); + node.setCssClass("o_sel_membersmgt_members"); + root.addChild(node); + } - if(acModule.isEnabled()) { + if(entryAdmin || memberManagementRight || groupManagementRight) { + GenericTreeNode node = new GenericTreeNode(translate("menu.groups"), CMD_GROUPS); + node.setAltText(translate("menu.groups.alt")); + node.setCssClass("o_sel_membersmgt_groups"); + root.addChild(node); + } + + if(acModule.isEnabled() && (entryAdmin || memberManagementRight)) { //check if the course is managed and/or has offers if(!RepositoryEntryManagedFlag.isManaged(repoEntry, RepositoryEntryManagedFlag.bookings) || acService.isResourceAccessControled(repoEntry.getOlatResource(), null)) { - node = new GenericTreeNode(translate("menu.orders"), CMD_BOOKING); + GenericTreeNode node = new GenericTreeNode(translate("menu.orders"), CMD_BOOKING); node.setAltText(translate("menu.orders.alt")); node.setCssClass("o_sel_membersmgt_orders"); root.addChild(node); } } - node = new GenericTreeNode(translate("menu.rights"), CMD_RIGHTS); - node.setAltText(translate("menu.rights.alt")); - node.setCssClass("o_sel_membersmgt_rights"); - root.addChild(node); + if(entryAdmin) { + GenericTreeNode node = new GenericTreeNode(translate("menu.rights"), CMD_RIGHTS); + node.setAltText(translate("menu.rights.alt")); + node.setCssClass("o_sel_membersmgt_rights"); + root.addChild(node); + } return gtm; } @@ -194,36 +210,44 @@ public class MembersManagementMainController extends MainLayoutBasicController Controller selectedCtrl = null; if(CMD_MEMBERS.equals(cmd)) { - if(membersOverviewCtrl == null) { - membersOverviewCtrl = new MembersOverviewController(ureq, bwControl, toolbarPanel, repoEntry); - listenTo(membersOverviewCtrl); - } else if(membersDirty) { - membersOverviewCtrl.reloadMembers(); + if(entryAdmin || memberManagementRight) { + if(membersOverviewCtrl == null) { + membersOverviewCtrl = new MembersOverviewController(ureq, bwControl, toolbarPanel, repoEntry); + listenTo(membersOverviewCtrl); + } else if(membersDirty) { + membersOverviewCtrl.reloadMembers(); + } + mainVC.put("content", membersOverviewCtrl.getInitialComponent()); + selectedCtrl = membersOverviewCtrl; } - mainVC.put("content", membersOverviewCtrl.getInitialComponent()); - selectedCtrl = membersOverviewCtrl; } else if(CMD_GROUPS.equals(cmd)) { - if(groupsCtrl == null) { - groupsCtrl = new CourseBusinessGroupListController(ureq, bwControl, repoEntry); - listenTo(groupsCtrl); + if(entryAdmin || memberManagementRight || groupManagementRight) { + if(groupsCtrl == null) { + groupsCtrl = new CourseBusinessGroupListController(ureq, bwControl, repoEntry); + listenTo(groupsCtrl); + } + groupsCtrl.reloadModel(); + mainVC.put("content", groupsCtrl.getInitialComponent()); + selectedCtrl = groupsCtrl; } - groupsCtrl.reloadModel(); - mainVC.put("content", groupsCtrl.getInitialComponent()); - selectedCtrl = groupsCtrl; } else if(CMD_BOOKING.equals(cmd)) { - if(ordersController == null) { - ordersController = new OrdersAdminController(ureq, bwControl, repoEntry.getOlatResource()); - listenTo(ordersController); + if(acModule.isEnabled() && (entryAdmin || memberManagementRight)) { + if(ordersController == null) { + ordersController = new OrdersAdminController(ureq, bwControl, repoEntry.getOlatResource()); + listenTo(ordersController); + } + mainVC.put("content", ordersController.getInitialComponent()); + selectedCtrl = ordersController; } - mainVC.put("content", ordersController.getInitialComponent()); - selectedCtrl = ordersController; } else if(CMD_RIGHTS.equals(cmd)) { - if(rightsController == null) { - rightsController = new GroupsAndRightsController(ureq, bwControl, repoEntry); - listenTo(rightsController); + if(entryAdmin) { + if(rightsController == null) { + rightsController = new GroupsAndRightsController(ureq, bwControl, repoEntry); + listenTo(rightsController); + } + mainVC.put("content", rightsController.getInitialComponent()); + selectedCtrl = rightsController; } - mainVC.put("content", rightsController.getInitialComponent()); - selectedCtrl = rightsController; } TreeNode selTreeNode = TreeHelper.findNodeByUserObject(cmd, menuTree.getTreeModel().getRootNode()); diff --git a/src/main/java/org/olat/course/run/CourseRuntimeController.java b/src/main/java/org/olat/course/run/CourseRuntimeController.java index bcd80211d40..147baf873dc 100644 --- a/src/main/java/org/olat/course/run/CourseRuntimeController.java +++ b/src/main/java/org/olat/course/run/CourseRuntimeController.java @@ -249,6 +249,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im if(!security.isEntryAdmin() && !isGuestOnly) { List<String> rights = cgm.getRights(getIdentity()); courseRightsCache.put(CourseRights.RIGHT_GROUPMANAGEMENT, new Boolean(rights.contains(CourseRights.RIGHT_GROUPMANAGEMENT))); + courseRightsCache.put(CourseRights.RIGHT_MEMBERMANAGEMENT, new Boolean(rights.contains(CourseRights.RIGHT_MEMBERMANAGEMENT))); courseRightsCache.put(CourseRights.RIGHT_COURSEEDITOR, new Boolean(rights.contains(CourseRights.RIGHT_COURSEEDITOR))); courseRightsCache.put(CourseRights.RIGHT_ARCHIVING, new Boolean(rights.contains(CourseRights.RIGHT_ARCHIVING))); courseRightsCache.put(CourseRights.RIGHT_ASSESSMENT, new Boolean(rights.contains(CourseRights.RIGHT_ASSESSMENT))); @@ -361,7 +362,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im private void initTools(Dropdown tools, ICourse course, final UserCourseEnvironmentImpl uce) { // 1) administrative tools if (reSecurity.isEntryAdmin() || reSecurity.isCourseCoach() || reSecurity.isGroupCoach() - || hasCourseRight(CourseRights.RIGHT_COURSEEDITOR) + || hasCourseRight(CourseRights.RIGHT_COURSEEDITOR) || hasCourseRight(CourseRights.RIGHT_MEMBERMANAGEMENT) || hasCourseRight(CourseRights.RIGHT_GROUPMANAGEMENT) || hasCourseRight(CourseRights.RIGHT_ARCHIVING) || hasCourseRight(CourseRights.RIGHT_STATISTICS) || hasCourseRight(CourseRights.RIGHT_DB) || hasCourseRight(CourseRights.RIGHT_ASSESSMENT)) { @@ -384,7 +385,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im tools.addComponent(new Spacer("")); } - if (reSecurity.isEntryAdmin() || hasCourseRight(CourseRights.RIGHT_GROUPMANAGEMENT)) { + if (reSecurity.isEntryAdmin() || hasCourseRight(CourseRights.RIGHT_GROUPMANAGEMENT) || hasCourseRight(CourseRights.RIGHT_MEMBERMANAGEMENT)) { membersLink = LinkFactory.createToolLink("unifiedusermngt", translate("command.opensimplegroupmngt"), this, "o_icon_membersmanagement"); membersLink.setElementCssClass("o_sel_course_members"); tools.addComponent(membersLink); @@ -398,6 +399,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im archiverLink = LinkFactory.createToolLink("archiver", translate("command.openarchiver"), this, "o_icon_archive_tool"); tools.addComponent(archiverLink); } + tools.addComponent(new Spacer("")); if (reSecurity.isEntryAdmin() || hasCourseRight(CourseRights.RIGHT_STATISTICS)) { @@ -976,12 +978,14 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im @Override protected Activateable2 doMembers(UserRequest ureq) { if(delayedClose == Delayed.members || requestForClose(ureq)) { - if (reSecurity.isEntryAdmin() || hasCourseRight(CourseRights.RIGHT_GROUPMANAGEMENT)) { + if (reSecurity.isEntryAdmin() || hasCourseRight(CourseRights.RIGHT_GROUPMANAGEMENT) || hasCourseRight(CourseRights.RIGHT_MEMBERMANAGEMENT)) { removeCustomCSS(ureq); OLATResourceable ores = OresHelper.createOLATResourceableInstance("MembersMgmt", 0l); ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapBusinessPath(ores)); WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(ores, null, getWindowControl()); - MembersManagementMainController ctrl = new MembersManagementMainController(ureq, addToHistory(ureq, bwControl), toolbarPanel, getRepositoryEntry()); + MembersManagementMainController ctrl = new MembersManagementMainController(ureq, addToHistory(ureq, bwControl), toolbarPanel, + getRepositoryEntry(), reSecurity.isEntryAdmin(), hasCourseRight(CourseRights.RIGHT_GROUPMANAGEMENT), + hasCourseRight(CourseRights.RIGHT_MEMBERMANAGEMENT)); listenTo(ctrl); membersCtrl = pushController(ureq, translate("command.opensimplegroupmngt"), ctrl); setActiveTool(membersLink); -- GitLab