Skip to content
Snippets Groups Projects
Commit 4a6ff460 authored by aboeckle's avatar aboeckle
Browse files

OO-4678: Added dependant rights to module config

parent 0045f96a
No related branches found
No related tags found
No related merge requests found
Showing
with 105 additions and 29 deletions
...@@ -37,4 +37,19 @@ public interface RelationRightProvider { ...@@ -37,4 +37,19 @@ public interface RelationRightProvider {
public String getTranslatedName(Locale locale); public String getTranslatedName(Locale locale);
public enum Order {
CourseAndCurriculumRight,
CourseProgressAndStatusRight,
LecturesAndAbsencesRight,
ViewEfficiencyStatementRight,
ViewCourseCalendarRight,
ResourceAndBookinsRight,
ViewGroupMemebershipsRight,
ViewAndEditProfileRight,
ResetPasswordRight,
ContactFormRight,
QualityReportAccessRight,
CertificateEmailRight,
AdministrativePropertiesRight;
}
} }
...@@ -50,7 +50,7 @@ public class CertificateEmailRightProvider implements RelationRightProvider { ...@@ -50,7 +50,7 @@ public class CertificateEmailRightProvider implements RelationRightProvider {
@Override @Override
public int getPosition() { public int getPosition() {
return 0; return Order.CertificateEmailRight.ordinal();
} }
@Override @Override
......
...@@ -44,7 +44,7 @@ public class ViewCourseCalendarRightProvider implements RelationRightProvider { ...@@ -44,7 +44,7 @@ public class ViewCourseCalendarRightProvider implements RelationRightProvider {
@Override @Override
public int getPosition() { public int getPosition() {
return 0; return Order.ViewCourseCalendarRight.ordinal();
} }
@Override @Override
......
...@@ -24,6 +24,8 @@ import java.util.Locale; ...@@ -24,6 +24,8 @@ import java.util.Locale;
import org.olat.basesecurity.RelationRightProvider; import org.olat.basesecurity.RelationRightProvider;
import org.olat.core.gui.translator.Translator; import org.olat.core.gui.translator.Translator;
import org.olat.core.util.Util; import org.olat.core.util.Util;
import org.olat.modules.coach.security.CoursesAndCurriculumRightProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/** /**
...@@ -35,16 +37,19 @@ import org.springframework.stereotype.Component; ...@@ -35,16 +37,19 @@ import org.springframework.stereotype.Component;
@Component @Component
public class ViewEfficiencyStatementRightProvider implements RelationRightProvider { public class ViewEfficiencyStatementRightProvider implements RelationRightProvider {
@Autowired
private CoursesAndCurriculumRightProvider parentRight;
public static final String RELATION_RIGHT = CourseRightsEnum.viewEfficiencyStatement.name(); public static final String RELATION_RIGHT = CourseRightsEnum.viewEfficiencyStatement.name();
@Override @Override
public RelationRightProvider getParent() { public RelationRightProvider getParent() {
return null; return parentRight;
} }
@Override @Override
public int getPosition() { public int getPosition() {
return 0; return Order.ViewEfficiencyStatementRight.ordinal();
} }
@Override @Override
......
...@@ -43,7 +43,7 @@ public class AdministrativePropertiesRightProvider implements RelationRightProvi ...@@ -43,7 +43,7 @@ public class AdministrativePropertiesRightProvider implements RelationRightProvi
@Override @Override
public int getPosition() { public int getPosition() {
return 0; return Order.AdministrativePropertiesRight.ordinal();
} }
@Override @Override
......
...@@ -48,7 +48,7 @@ public class ContactFormRightProvider implements RelationRightProvider { ...@@ -48,7 +48,7 @@ public class ContactFormRightProvider implements RelationRightProvider {
@Override @Override
public int getPosition() { public int getPosition() {
return 0; return Order.ContactFormRight.ordinal();
} }
@Override @Override
......
...@@ -25,6 +25,7 @@ import org.olat.basesecurity.RelationRightProvider; ...@@ -25,6 +25,7 @@ import org.olat.basesecurity.RelationRightProvider;
import org.olat.core.gui.translator.Translator; import org.olat.core.gui.translator.Translator;
import org.olat.core.util.Util; import org.olat.core.util.Util;
import org.olat.modules.coach.ui.CoachMainController; import org.olat.modules.coach.ui.CoachMainController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/* /*
...@@ -33,17 +34,20 @@ import org.springframework.stereotype.Component; ...@@ -33,17 +34,20 @@ import org.springframework.stereotype.Component;
*/ */
@Component @Component
public class CourseProgressAndStatusRightProvider implements RelationRightProvider { public class CourseProgressAndStatusRightProvider implements RelationRightProvider {
public static final String RELATION_RIGHT = "showCourseProgressAndStatus"; @Autowired
private CoursesAndCurriculumRightProvider parentRight;
public static final String RELATION_RIGHT = "showCourseProgressAndStatus";
@Override @Override
public RelationRightProvider getParent() { public RelationRightProvider getParent() {
return null; return parentRight;
} }
@Override @Override
public int getPosition() { public int getPosition() {
return 0; return Order.CourseProgressAndStatusRight.ordinal();
} }
@Override @Override
......
...@@ -43,7 +43,7 @@ public class CoursesAndCurriculumRightProvider implements RelationRightProvider{ ...@@ -43,7 +43,7 @@ public class CoursesAndCurriculumRightProvider implements RelationRightProvider{
@Override @Override
public int getPosition() { public int getPosition() {
return 0; return Order.CourseAndCurriculumRight.ordinal();
} }
@Override @Override
......
...@@ -25,6 +25,7 @@ import org.olat.basesecurity.RelationRightProvider; ...@@ -25,6 +25,7 @@ import org.olat.basesecurity.RelationRightProvider;
import org.olat.core.gui.translator.Translator; import org.olat.core.gui.translator.Translator;
import org.olat.core.util.Util; import org.olat.core.util.Util;
import org.olat.modules.coach.ui.CoachMainController; import org.olat.modules.coach.ui.CoachMainController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
/* /*
...@@ -33,17 +34,20 @@ import org.springframework.stereotype.Component; ...@@ -33,17 +34,20 @@ import org.springframework.stereotype.Component;
*/ */
@Component @Component
public class LecturesAndAbsencesRightProvider implements RelationRightProvider { public class LecturesAndAbsencesRightProvider implements RelationRightProvider {
@Autowired
private CoursesAndCurriculumRightProvider parentRight;
public static final String RELATION_RIGHT = "showLecturesAndAbsences"; public static final String RELATION_RIGHT = "showLecturesAndAbsences";
@Override @Override
public RelationRightProvider getParent() { public RelationRightProvider getParent() {
return null; return parentRight;
} }
@Override @Override
public int getPosition() { public int getPosition() {
return 0; return Order.LecturesAndAbsencesRight.ordinal();
} }
@Override @Override
......
...@@ -43,7 +43,7 @@ public class ResetPasswordRightProvider implements RelationRightProvider { ...@@ -43,7 +43,7 @@ public class ResetPasswordRightProvider implements RelationRightProvider {
@Override @Override
public int getPosition() { public int getPosition() {
return 0; return Order.ResetPasswordRight.ordinal();
} }
@Override @Override
......
...@@ -43,7 +43,7 @@ public class ResourcesAndBookingsRightProvider implements RelationRightProvider ...@@ -43,7 +43,7 @@ public class ResourcesAndBookingsRightProvider implements RelationRightProvider
@Override @Override
public int getPosition() { public int getPosition() {
return 0; return Order.ResourceAndBookinsRight.ordinal();
} }
@Override @Override
......
...@@ -43,7 +43,7 @@ public class ViewAndEditProfileRightProvider implements RelationRightProvider { ...@@ -43,7 +43,7 @@ public class ViewAndEditProfileRightProvider implements RelationRightProvider {
@Override @Override
public int getPosition() { public int getPosition() {
return 0; return Order.ViewAndEditProfileRight.ordinal();
} }
@Override @Override
......
...@@ -43,7 +43,7 @@ public class ViewGroupMembershipsRightProvider implements RelationRightProvider ...@@ -43,7 +43,7 @@ public class ViewGroupMembershipsRightProvider implements RelationRightProvider
@Override @Override
public int getPosition() { public int getPosition() {
return 0; return Order.ViewGroupMemebershipsRight.ordinal();
} }
@Override @Override
......
...@@ -45,7 +45,7 @@ public class QualityReportAccessRightProvider implements RelationRightProvider { ...@@ -45,7 +45,7 @@ public class QualityReportAccessRightProvider implements RelationRightProvider {
@Override @Override
public int getPosition() { public int getPosition() {
return 0; return Order.QualityReportAccessRight.ordinal();
} }
@Override @Override
......
...@@ -19,7 +19,9 @@ ...@@ -19,7 +19,9 @@
*/ */
package org.olat.user.ui.role; package org.olat.user.ui.role;
import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
...@@ -28,15 +30,18 @@ import java.util.stream.Collectors; ...@@ -28,15 +30,18 @@ import java.util.stream.Collectors;
import org.olat.basesecurity.IdentityRelationshipService; import org.olat.basesecurity.IdentityRelationshipService;
import org.olat.basesecurity.RelationRight; import org.olat.basesecurity.RelationRight;
import org.olat.basesecurity.RelationRightProvider;
import org.olat.basesecurity.RelationRole; import org.olat.basesecurity.RelationRole;
import org.olat.basesecurity.RelationRoleManagedFlag; import org.olat.basesecurity.RelationRoleManagedFlag;
import org.olat.basesecurity.RelationRoleToRight; import org.olat.basesecurity.RelationRoleToRight;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.form.flexible.FormItem;
import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.FormItemContainer;
import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement; import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
import org.olat.core.gui.components.form.flexible.elements.SingleSelection; import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
import org.olat.core.gui.components.form.flexible.elements.TextElement; import org.olat.core.gui.components.form.flexible.elements.TextElement;
import org.olat.core.gui.components.form.flexible.impl.FormBasicController; import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
import org.olat.core.gui.components.form.flexible.impl.FormEvent;
import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.Event; import org.olat.core.gui.control.Event;
...@@ -61,13 +66,16 @@ public class EditRelationRoleController extends FormBasicController { ...@@ -61,13 +66,16 @@ public class EditRelationRoleController extends FormBasicController {
"", "supervisor", "legalRepresentative", "tutor", "parent", "", "supervisor", "legalRepresentative", "tutor", "parent",
"teacher", "expert", "legalGardian", "employer", "sportsClub" "teacher", "expert", "legalGardian", "employer", "sportsClub"
}; };
private static final String INTENDING = "\u00a0"; //   non-breaking space
private TextElement roleEl; private TextElement roleEl;
private SingleSelection predefinedLabelEl; private SingleSelection predefinedLabelEl;
private MultipleSelectionElement rightsEl; private MultipleSelectionElement rightsEl;
private RelationRole relationRole; private RelationRole relationRole;
private List<RelationRight> rights; String[] rightKeys;
String[] rightValues;
List<RelationRightProvider> rightProviders;
@Autowired @Autowired
private I18nModule i18nModule; private I18nModule i18nModule;
...@@ -75,6 +83,8 @@ public class EditRelationRoleController extends FormBasicController { ...@@ -75,6 +83,8 @@ public class EditRelationRoleController extends FormBasicController {
private I18nManager i18nManager; private I18nManager i18nManager;
@Autowired @Autowired
private IdentityRelationshipService identityRelationsService; private IdentityRelationshipService identityRelationsService;
@Autowired
private List<RelationRightProvider> relationRights;
public EditRelationRoleController(UserRequest ureq, WindowControl wControl) { public EditRelationRoleController(UserRequest ureq, WindowControl wControl) {
this(ureq, wControl,null); this(ureq, wControl,null);
...@@ -82,8 +92,12 @@ public class EditRelationRoleController extends FormBasicController { ...@@ -82,8 +92,12 @@ public class EditRelationRoleController extends FormBasicController {
public EditRelationRoleController(UserRequest ureq, WindowControl wControl, RelationRole relationRole) { public EditRelationRoleController(UserRequest ureq, WindowControl wControl, RelationRole relationRole) {
super(ureq, wControl, Util.createPackageTranslator(UserModule.class, ureq.getLocale())); super(ureq, wControl, Util.createPackageTranslator(UserModule.class, ureq.getLocale()));
rights = identityRelationsService.getAvailableRights();
this.relationRole = relationRole; this.relationRole = relationRole;
this.rightKeys = new String[relationRights.size()];
this.rightValues = new String[relationRights.size()];
this.rightProviders = new ArrayList<>(relationRights.size());
this.relationRights.sort(Comparator.comparing(RelationRightProvider::getPosition));
initForm(ureq); initForm(ureq);
} }
...@@ -104,15 +118,23 @@ public class EditRelationRoleController extends FormBasicController { ...@@ -104,15 +118,23 @@ public class EditRelationRoleController extends FormBasicController {
predefinedLabelKeys, predefinedLabelValues); predefinedLabelKeys, predefinedLabelValues);
predefinedLabelEl.select(predefinedLabelKeys[0], true); predefinedLabelEl.select(predefinedLabelKeys[0], true);
} }
String[] rightKeys = new String[rights.size()]; for(int i=0; i < relationRights.size(); i++) {
String[] rightValues = new String[rights.size()]; StringBuilder valueBuilder = new StringBuilder();
for(int i=rights.size(); i-->0; ) { if (relationRights.get(i).getParent() != null) {
rightKeys[i] = rights.get(i).getRight(); for (int k = 6; k-->0;) {
rightValues[i] = RelationRolesAndRightsUIFactory.getTranslatedRight(rights.get(i), getLocale()); valueBuilder.append(INTENDING);
}
}
valueBuilder.append(relationRights.get(i).getTranslatedName(getLocale()));
rightKeys[i] = relationRights.get(i).getRight();
rightValues[i] = valueBuilder.toString();
rightProviders.add(i, relationRights.get(i));
} }
rightsEl = uifactory.addCheckboxesVertical("role.rights", formLayout, rightKeys, rightValues, 2); rightsEl = uifactory.addCheckboxesVertical("role.rights", formLayout, rightKeys, rightValues, 1);
rightsEl.setEnabled(!RelationRoleManagedFlag.isManaged(relationRole, RelationRoleManagedFlag.rights)); rightsEl.setEnabled(!RelationRoleManagedFlag.isManaged(relationRole, RelationRoleManagedFlag.rights));
rightsEl.addActionListener(FormEvent.ONCLICK);
if(relationRole != null) { if(relationRole != null) {
Set<RelationRoleToRight> roleToRights = relationRole.getRights(); Set<RelationRoleToRight> roleToRights = relationRole.getRights();
for(RelationRoleToRight roleToRight:roleToRights) { for(RelationRoleToRight roleToRight:roleToRights) {
...@@ -124,6 +146,8 @@ public class EditRelationRoleController extends FormBasicController { ...@@ -124,6 +146,8 @@ public class EditRelationRoleController extends FormBasicController {
} }
} }
} }
checkDependentRights();
FormLayoutContainer buttonsCont = FormLayoutContainer.createButtonLayout("buttons", getTranslator()); FormLayoutContainer buttonsCont = FormLayoutContainer.createButtonLayout("buttons", getTranslator());
formLayout.add(buttonsCont); formLayout.add(buttonsCont);
...@@ -136,6 +160,14 @@ public class EditRelationRoleController extends FormBasicController { ...@@ -136,6 +160,14 @@ public class EditRelationRoleController extends FormBasicController {
// //
} }
@Override
protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
if (source == rightsEl) {
checkDependentRights();
}
super.formInnerEvent(ureq, source, event);
}
@Override @Override
protected boolean validateFormLogic(UserRequest ureq) { protected boolean validateFormLogic(UserRequest ureq) {
boolean allOk = super.validateFormLogic(ureq); boolean allOk = super.validateFormLogic(ureq);
...@@ -152,7 +184,7 @@ public class EditRelationRoleController extends FormBasicController { ...@@ -152,7 +184,7 @@ public class EditRelationRoleController extends FormBasicController {
@Override @Override
protected void formOK(UserRequest ureq) { protected void formOK(UserRequest ureq) {
Collection<String> selectedRightKeys = rightsEl.getSelectedKeys(); Collection<String> selectedRightKeys = rightsEl.getSelectedKeys();
List<RelationRight> selectedRights = rights.stream() List<RelationRight> selectedRights = identityRelationsService.getAvailableRights().stream()
.filter(r -> selectedRightKeys.contains(r.getRight())).collect(Collectors.toList()); .filter(r -> selectedRightKeys.contains(r.getRight())).collect(Collectors.toList());
if(relationRole == null) { if(relationRole == null) {
relationRole = identityRelationsService.createRole(roleEl.getValue(), selectedRights); relationRole = identityRelationsService.createRole(roleEl.getValue(), selectedRights);
...@@ -199,4 +231,20 @@ public class EditRelationRoleController extends FormBasicController { ...@@ -199,4 +231,20 @@ public class EditRelationRoleController extends FormBasicController {
protected void formCancelled(UserRequest ureq) { protected void formCancelled(UserRequest ureq) {
fireEvent(ureq, Event.CANCELLED_EVENT); fireEvent(ureq, Event.CANCELLED_EVENT);
} }
private void checkDependentRights() {
for(int i=0; i < relationRights.size(); i++) {
RelationRightProvider rightProvider = rightProviders.get(i);
if (rightProvider.getParent() != null) {
int parentIndex = rightProviders.indexOf(rightProvider.getParent());
if (rightsEl.isSelected(parentIndex)) {
rightsEl.setEnabled(rightKeys[i], true);
} else {
rightsEl.setEnabled(rightKeys[i], false);
rightsEl.select(rightKeys[i], false);
}
}
}
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment