diff --git a/src/main/java/org/olat/basesecurity/manager/GroupDAO.java b/src/main/java/org/olat/basesecurity/manager/GroupDAO.java index c624071c0c66e4f5fc447b6d51699d47b96416b5..83dfe04e8798776402c08054357d6f8d06f039dd 100644 --- a/src/main/java/org/olat/basesecurity/manager/GroupDAO.java +++ b/src/main/java/org/olat/basesecurity/manager/GroupDAO.java @@ -194,6 +194,20 @@ public class GroupDAO { return count == null ? false: count.intValue() > 0; } + public List<String> getPermissions(IdentityRef identity, OLATResource resource) { + StringBuilder sb = new StringBuilder(); + sb.append("select grant.permission from bgrant as grant") + .append(" inner join grant.group as baseGroup") + .append(" inner join baseGroup.members as membership") + .append(" where membership.identity.key=:identityKey and grant.resource.key=:resourceKey") + .append(" and membership.role=grant.role"); + return dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), String.class) + .setParameter("identityKey", identity.getKey()) + .setParameter("resourceKey", resource.getKey()) + .getResultList(); + } + public List<Grant> getGrants(Group group, String role) { StringBuilder sb = new StringBuilder(); sb.append("select grant from bgrant as grant") diff --git a/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java b/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java index fef06048e548a957649c121b5696cbb061219c65..b55887050e475483577d462c12d5b8a09d6c249e 100644 --- a/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java +++ b/src/main/java/org/olat/course/groupsandrights/PersistingCourseGroupManager.java @@ -123,15 +123,14 @@ public class PersistingCourseGroupManager extends BasicManager implements Course * @see org.olat.course.groupsandrights.CourseGroupManager#hasRight(org.olat.core.id.Identity, * java.lang.String) */ + @Override public boolean hasRight(Identity identity, String courseRight) { - boolean hasRight = rightManager.hasBGRight(courseRight, identity, getCourseResource()); - return hasRight; + return rightManager.hasBGRight(courseRight, identity, getCourseResource()); } - + + @Override public List<String> getRights(Identity identity) { - return Collections.emptyList(); - - //TODO groups securityManager.getIdentityPermissionOnresourceable(identity, getCourseResource()); + return rightManager.getBGRights(identity, getCourseResource()); } @Override diff --git a/src/main/java/org/olat/course/member/CourseBusinessGroupListController.java b/src/main/java/org/olat/course/member/CourseBusinessGroupListController.java index 33fc04185164fd766a557e9cbd90e7d5d68b3a90..0e540a1286fd6613c65fb7f17505c07ce0f33b0f 100644 --- a/src/main/java/org/olat/course/member/CourseBusinessGroupListController.java +++ b/src/main/java/org/olat/course/member/CourseBusinessGroupListController.java @@ -196,10 +196,12 @@ public class CourseBusinessGroupListController extends AbstractBusinessGroupList cmc.deactivate(); cleanUpPopups(); addGroupsToCourse(selectedGroups); + fireEvent(ureq, Event.CHANGED_EVENT); } else if (source == confirmRemoveResource) { if (DialogBoxUIFactory.isYesEvent(event)) { // yes case BusinessGroup group = (BusinessGroup)confirmRemoveResource.getUserObject(); doRemoveBusinessGroups(Collections.singletonList(group)); + fireEvent(ureq, Event.CHANGED_EVENT); } } else if (source == confirmRemoveMultiResource) { if (DialogBoxUIFactory.isYesEvent(event)) { // yes case diff --git a/src/main/java/org/olat/course/member/MembersManagementMainController.java b/src/main/java/org/olat/course/member/MembersManagementMainController.java index 542cc993e3185a4a33f56c614f988bdf03037a7f..7165fdb35ace9d34c4edb6afe77c88892458e896 100644 --- a/src/main/java/org/olat/course/member/MembersManagementMainController.java +++ b/src/main/java/org/olat/course/member/MembersManagementMainController.java @@ -21,7 +21,6 @@ package org.olat.course.member; import java.util.List; -import org.olat.core.CoreSpringFactory; import org.olat.core.commons.fullWebApp.LayoutMain3ColsController; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; @@ -52,6 +51,7 @@ import org.olat.resource.accesscontrol.ACService; import org.olat.resource.accesscontrol.AccessControlModule; import org.olat.resource.accesscontrol.ui.OrdersAdminController; import org.olat.util.logging.activity.LoggingResourceable; +import org.springframework.beans.factory.annotation.Autowired; /** * @@ -73,16 +73,18 @@ public class MembersManagementMainController extends MainLayoutBasicController private MembersOverviewController membersOverviewCtrl; private GroupsAndRightsController rightsController; - private final ACService acService; - private final RepositoryEntry repoEntry; - private final AccessControlModule acModule; + private boolean membersDirty; + private RepositoryEntry repoEntry; + + @Autowired + private ACService acService; + @Autowired + private AccessControlModule acModule; public MembersManagementMainController(UserRequest ureq, WindowControl wControl, RepositoryEntry re) { super(ureq, wControl); this.repoEntry = re; - acModule = CoreSpringFactory.getImpl(AccessControlModule.class); - acService = CoreSpringFactory.getImpl(ACService.class); - + //logging getUserActivityLogger().setStickyActionType(ActionType.admin); ICourse course = CourseFactory.loadCourse(re.getOlatResource()); @@ -150,6 +152,16 @@ public class MembersManagementMainController extends MainLayoutBasicController } } + @Override + protected void event(UserRequest ureq, Controller source, Event event) { + if(groupsCtrl == source) { + if(event == Event.CHANGED_EVENT) { + membersDirty = true; + } + } + super.event(ureq, source, event); + } + @Override public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) { if(entries == null || entries.isEmpty()) return; @@ -174,6 +186,8 @@ public class MembersManagementMainController extends MainLayoutBasicController if(membersOverviewCtrl == null) { membersOverviewCtrl = new MembersOverviewController(ureq, bwControl, repoEntry); listenTo(membersOverviewCtrl); + } else if(membersDirty) { + membersOverviewCtrl.reloadMembers(); } mainVC.put("content", membersOverviewCtrl.getInitialComponent()); selectedCtrl = membersOverviewCtrl; diff --git a/src/main/java/org/olat/course/member/MembersOverviewController.java b/src/main/java/org/olat/course/member/MembersOverviewController.java index b7e277f6233455e66157379c609a760f9aade51f..0382a56d327d440aa64b63bdda78a9485ae35fbb 100644 --- a/src/main/java/org/olat/course/member/MembersOverviewController.java +++ b/src/main/java/org/olat/course/member/MembersOverviewController.java @@ -236,6 +236,30 @@ public class MembersOverviewController extends BasicController implements Activa dedupCtrl = null; cmc = null; } + + protected void reloadMembers() { + if(allMemberListCtrl != null) { + allMemberListCtrl.reloadModel(); + } + if(ownersCtrl != null) { + ownersCtrl.reloadModel(); + } + if(tutorsCtrl != null) { + tutorsCtrl.reloadModel(); + } + if(participantsCtrl != null) { + participantsCtrl.reloadModel(); + } + if(waitingCtrl != null) { + waitingCtrl.reloadModel(); + } + if(selectedCtrl != null) { + selectedCtrl.reloadModel(); + } + if(searchCtrl != null) { + searchCtrl.reloadModel(); + } + } private void doChooseMembers(UserRequest ureq) { removeAsListenerAndDispose(importMembersWizard); diff --git a/src/main/java/org/olat/group/right/BGRightManager.java b/src/main/java/org/olat/group/right/BGRightManager.java index 6a54cb5952ef8d0a47d496baa00c37060fa5f594..24427f68d79b934bfb1df74ccb03637259d26176 100644 --- a/src/main/java/org/olat/group/right/BGRightManager.java +++ b/src/main/java/org/olat/group/right/BGRightManager.java @@ -97,6 +97,14 @@ public interface BGRightManager { * right in the given resource */ public boolean hasBGRight(String bgRight, IdentityRef identity, OLATResource resource); + + /** + * + * @param identity + * @param resource + * @return + */ + public List<String> getBGRights(IdentityRef identity, OLATResource resource); /** * @param rightGroup diff --git a/src/main/java/org/olat/group/right/BGRightManagerImpl.java b/src/main/java/org/olat/group/right/BGRightManagerImpl.java index cc4109a96702c58276f3d30f25fa2a02c827ffc8..113d498c2386a68fd0a9ce7bffad6ba90b562924 100644 --- a/src/main/java/org/olat/group/right/BGRightManagerImpl.java +++ b/src/main/java/org/olat/group/right/BGRightManagerImpl.java @@ -122,6 +122,11 @@ public class BGRightManagerImpl extends BasicManager implements BGRightManager { public boolean hasBGRight(String bgRight, IdentityRef identity, OLATResource resource) { return groupDao.hasGrant(identity, bgRight, resource); } + + @Override + public List<String> getBGRights(IdentityRef identity, OLATResource resource) { + return groupDao.getPermissions(identity, resource); + } /** * @see org.olat.group.right.BGRightManager#findBGRights(org.olat.group.BusinessGroup) diff --git a/src/main/java/org/olat/group/ui/main/AbstractBusinessGroupListController.java b/src/main/java/org/olat/group/ui/main/AbstractBusinessGroupListController.java index af140de1ec66c52debeb23eb95d2e9fe4733cbb4..f8597eb94f8195feaad05723df43d549e878e1d3 100644 --- a/src/main/java/org/olat/group/ui/main/AbstractBusinessGroupListController.java +++ b/src/main/java/org/olat/group/ui/main/AbstractBusinessGroupListController.java @@ -434,6 +434,7 @@ public abstract class AbstractBusinessGroupListController extends FormBasicContr String businessPath = "[BusinessGroup:" + group.getKey() + "]"; NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl()); } + fireEvent(ureq, Event.CHANGED_EVENT); } else if (source == businessGroupWizard) { if(event == Event.CANCELLED_EVENT || event == Event.DONE_EVENT || event == Event.CHANGED_EVENT) { getWindowControl().pop();