Skip to content

Commit

Permalink
Merge branch 'master' into feature/simulations
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Nov 24, 2022
2 parents f0d16ca + 1ddc227 commit 75a8e45
Show file tree
Hide file tree
Showing 7 changed files with 206 additions and 124 deletions.
13 changes: 7 additions & 6 deletions gui/admin-gui/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,12 @@
package com.evolveum.midpoint.gui.impl.component.menu;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.cases.api.util.QueryUtils;
import com.evolveum.midpoint.gui.api.util.GuiDisplayTypeUtil;
import com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.PageAssignmentHolderDetails;
import com.evolveum.midpoint.gui.impl.page.admin.cases.PageCase;
import com.evolveum.midpoint.gui.impl.page.admin.resource.PageResource;
import com.evolveum.midpoint.gui.impl.page.self.PageRequestAccess;
import com.evolveum.midpoint.gui.impl.page.self.dashboard.PageSelfDashboard;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.security.MidPointApplication;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
Expand All @@ -40,16 +29,20 @@
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.string.StringValue;

import com.evolveum.midpoint.cases.api.util.QueryUtils;
import com.evolveum.midpoint.gui.api.GuiStyleConstants;
import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.GuiDisplayTypeUtil;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.gui.impl.page.admin.AbstractPageObjectDetails;
import com.evolveum.midpoint.gui.impl.page.admin.cases.PageCase;
import com.evolveum.midpoint.gui.impl.page.admin.systemconfiguration.page.PageBaseSystemConfiguration;
import com.evolveum.midpoint.gui.impl.page.self.PageRequestAccess;
import com.evolveum.midpoint.gui.impl.page.self.dashboard.PageSelfDashboard;
import com.evolveum.midpoint.model.api.AccessCertificationService;
import com.evolveum.midpoint.model.api.ModelAuthorizationAction;
import com.evolveum.midpoint.model.api.authentication.CompiledDashboardType;
import com.evolveum.midpoint.model.api.authentication.CompiledGuiProfile;
import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView;
Expand All @@ -63,7 +56,12 @@
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.application.PageMounter;
import com.evolveum.midpoint.web.component.menu.*;
import com.evolveum.midpoint.web.page.admin.cases.*;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.cases.PageCaseWorkItem;
import com.evolveum.midpoint.web.page.admin.cases.PageCaseWorkItemsAll;
import com.evolveum.midpoint.web.page.admin.cases.PageCaseWorkItemsAllocatedToMe;
import com.evolveum.midpoint.web.page.admin.cases.PageWorkItemsClaimable;
import com.evolveum.midpoint.web.page.admin.certification.*;
import com.evolveum.midpoint.web.page.admin.configuration.*;
import com.evolveum.midpoint.web.page.admin.home.PageDashboardConfigurable;
Expand All @@ -80,6 +78,7 @@
import com.evolveum.midpoint.web.page.admin.workflow.PageAttorneySelection;
import com.evolveum.midpoint.web.page.admin.workflow.PageWorkItemsAttorney;
import com.evolveum.midpoint.web.page.self.PageSelfConsents;
import com.evolveum.midpoint.web.security.MidPointApplication;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;
Expand Down Expand Up @@ -534,11 +533,10 @@ private void createBasicAssignmentHolderMenuItems(MainMenuItem mainMenuItem, Pag
Class<? extends PageBase> page = pageDesc.getListClass();
boolean isDefaultViewVisible = true;

Optional<CompiledObjectCollectionView> defaultViewOptional = getPageBase().getCompiledGuiProfile().findAllApplicableObjectCollectionViews(pageDesc.getTypeName()).stream()
.filter(view -> view.isDefaultView()).findFirst();
CompiledObjectCollectionView defaultView = getPageBase().getCompiledGuiProfile().findAllApplicableObjectCollectionViews(pageDesc.getTypeName()).stream()
.filter(view -> view.isDefaultView()).findFirst().orElse(null);

if (defaultViewOptional.isPresent()) {
CompiledObjectCollectionView defaultView = defaultViewOptional.get();
if (defaultView != null) {
isDefaultViewVisible = WebComponentUtil.getElementVisibility(defaultView.getVisibility());
if (isDefaultViewVisible) {
DisplayType viewDisplayType = defaultView.getDisplay();
Expand Down Expand Up @@ -675,18 +673,18 @@ public boolean isMenuActive(WebPage page) {
private void addCollectionsMenuItems(MainMenuItem mainMenuItem, QName type, Class<? extends PageBase> redirectToPage) {
List<CompiledObjectCollectionView> objectViews = getPageBase().getCompiledGuiProfile().findAllApplicableObjectCollectionViews(type);

objectViews.forEach(objectView -> {
List<MenuItem> items = objectViews.stream().map(objectView -> {
if (objectView.isDefaultView() || !WebComponentUtil.getElementVisibility(objectView.getVisibility())) {
return;
return null;
}

OperationTypeType operationTypeType = objectView.getApplicableForOperation();
if (operationTypeType != null && operationTypeType != OperationTypeType.MODIFY) {
return;
return null;
}

if (objectView.isDefaultView()) {
return;
return null;
}
DisplayType viewDisplayType = objectView.getDisplay();

Expand All @@ -700,19 +698,18 @@ private void addCollectionsMenuItems(MainMenuItem mainMenuItem, QName type, Clas
}

String iconClass = GuiDisplayTypeUtil.getIconCssClass(viewDisplayType);
MenuItem userViewMenu = new MenuItem(label,
MenuItem menuItem = new MenuItem(label,
StringUtils.isEmpty(iconClass) ? BaseMenuItem.DEFAULT_ICON : iconClass, redirectToPage, pageParameters, isObjectCollectionMenuActive(objectView));
userViewMenu.setDisplayOrder(objectView.getDisplayOrder());
mainMenuItem.addCollectionMenuItem(userViewMenu);
});
menuItem.setDisplayOrder(objectView.getDisplayOrder());

return menuItem;
}).filter(i -> i != null).collect(Collectors.toList());

// We need to sort after we get all the collections. Only then we have correct collection labels.
// We do not want to determine the labels twice.
items.sort(
Comparator.comparing(MenuItem::getDisplayOrder, Comparator.nullsLast(Comparator.naturalOrder()))
.thenComparing(MenuItem::getNameModel, Comparator.nullsLast(Comparator.naturalOrder())));

// TODO: can this be combined in a single sort?
// collectionMenuItems.sort(Comparator.comparing(o -> o.getNameModel().getObject()));
// collectionMenuItems.sort(Comparator.comparingInt(o -> ObjectUtils.defaultIfNull(o.getDisplayOrder(), Integer.MAX_VALUE)));
// return collectionMenuItems;
items.forEach(i -> mainMenuItem.addCollectionMenuItem(i));
}

private boolean isObjectCollectionMenuActive(CompiledObjectCollectionView objectView) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -752,15 +752,14 @@ private <O extends ObjectType> void applyObjectTemplateToObject(PrismObject<O> o
+ " as specified in item definition in " + objectTemplateType);
continue;
}
Item<?, ?> item = object.findItem(itemPath);
if (item != null) {
Collection<Item<?, ?>> items = object.getAllItems(itemPath);
for (Item<?, ?> item : items) {
ItemDefinition itemDef = item.getDefinition();
if (itemDef != itemDefFromObject) {
applyObjectTemplateItem(itemDef, templateItemDefType, "item "+itemPath+" in " + object
+ " as specified in item definition in "+objectTemplateType);
}
}

}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3210,6 +3210,34 @@ public void test400AutzJackSearchByAssignmentTargetRef() throws Exception {
assertSearch(UserType.class, existsQuery, 1); // guybrush
}

/**
* Checks whether item configuration from object template is applicated for child item of multivalue container
*
* MID-8347
*/
@Test
public void test410ItemAccessMultivalueAttrChild() throws Exception {
given();
cleanupAutzTest(USER_JACK_OID);

assignRole(USER_JACK_OID, ROLE_SUPERUSER_OID);

login(USER_JACK_USERNAME);

when();

PrismObject<UserType> user = getObject(UserType.class, USER_CHARLES_OID);

then();

assertObjectDefinition(user.getDefinition())
.container(UserType.F_OPERATION_EXECUTION)
.property(OperationExecutionType.F_MESSAGE)
.assertDenyAdd()
.assertDenyModify()
.assertAllowRead();
}

private void assertTaskAddAllow(String oid, String name, String ownerOid, String handlerUri) throws Exception {
assertAllow("add task " + name,
(task, result) -> addTask(oid, name, ownerOid, handlerUri, task, result));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,17 @@
</target>
</mapping>

<!-- MID-8347 -->
<item>
<ref>operationExecution/message</ref>
<limitations>
<layer>presentation</layer>
<access>
<read>true</read>
<add>false</add>
<modify>false</modify>
</access>
</limitations>
</item>

</objectTemplate>

0 comments on commit 75a8e45

Please sign in to comment.