Skip to content

Commit

Permalink
Update role mining feature
Browse files Browse the repository at this point in the history
  • Loading branch information
tchrapovic committed Jul 7, 2023
1 parent a9ccf90 commit 010acaa
Show file tree
Hide file tree
Showing 67 changed files with 3,467 additions and 2,976 deletions.
4 changes: 3 additions & 1 deletion config/sql/native-new/postgres-new.sql
Original file line number Diff line number Diff line change
Expand Up @@ -1167,6 +1167,7 @@ CREATE TABLE m_cluster_table (
riskLevel TEXT,
points TEXT[],
pointCount INTEGER,
defaultDetection TEXT[],
elements TEXT[],
elementCount INTEGER,
minOccupation INTEGER,
Expand Down Expand Up @@ -1201,7 +1202,8 @@ CREATE TABLE m_parent_cluster_table (
clustersRef TEXT[],
consist INTEGER,
density TEXT,
mode TEXT
mode TEXT,
options TEXT
)
INHERITS (m_assignment_holder);

Expand Down
5 changes: 5 additions & 0 deletions gui/admin-gui/src/frontend/scss/midpoint.scss
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
@import "role-mining-static-header";
@import "role-mining-static-header-name";
@import "role-mining-static-row-header";
@import "role-mining-no-border";


.role-mining-rotated-header{
Expand All @@ -47,6 +48,10 @@
border: 1px solid #f4f4f4; border: 1px solid #f4f4f4;
}

.role-mining-no-border {
border-left: none !important;
border-right: none !important;
}

.role-mining-static-header {
width: 40px;
Expand Down
14 changes: 14 additions & 0 deletions gui/admin-gui/src/frontend/scss/role-mining-no-border.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/*!
* Copyright (C) 2010-2023 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/


.role-mining-no-border {
border-left: none !important;
border-right: none !important;
}


Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
transform: rotate(180deg);
writing-mode: revert;
width: 40px;
height: 150px;
height: 120px;
border: 1px solid #f4f4f4;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@

.role-mining-static-row-header {
width: 150px;
height: 150px;
height: 120px;
border-left: none !important;
border-right: none !important;
}


Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,11 @@
import static com.evolveum.midpoint.gui.api.component.mining.analyse.tools.grouper.Grouper.getRoleGroupByJc;

import java.util.*;
import java.util.stream.Collectors;

import com.evolveum.midpoint.gui.impl.page.admin.role.mining.algorithm.DataPoint;
import com.evolveum.midpoint.prism.impl.binding.AbstractReferencable;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.gui.impl.page.admin.role.mining.utils.RoleUtils;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.xml.ns._public.common.common_3.UserType;

public class JacquardSorter {

Expand All @@ -44,69 +39,6 @@ private static double jacquardSimilarityMs(@NotNull UniqueRoleSet set1, UniqueRo
return (double) intersection.size() / union.size();
}

public static List<String> getRolesOid(AssignmentHolderType object) {
List<String> oidList;
List<AssignmentType> assignments = object.getAssignment();
oidList = assignments.stream().map(AssignmentType::getTargetRef).filter(
targetRef -> targetRef.getType().equals(RoleType.COMPLEX_TYPE))
.map(AbstractReferencable::getOid).sorted()
.collect(Collectors.toList());
return oidList;
}

public static List<DataPoint> jaccSortDataPoints(List<DataPoint> dataPoints) {

List<DataPoint> sortedUserSets = new ArrayList<>();
List<DataPoint> remainingUserSets = new ArrayList<>(dataPoints);

remainingUserSets.sort(Comparator.comparingInt(set -> -set.getPoints().size()));

while (!remainingUserSets.isEmpty()) {
DataPoint currentUserSet = remainingUserSets.remove(0);
double maxSimilarity = 0;
int insertIndex = -1;

if (sortedUserSets.size() < 2) {
if (sortedUserSets.isEmpty()) {
sortedUserSets.add(currentUserSet);
} else {
sortedUserSets.add(0, currentUserSet);
}
} else {
for (int i = 1; i < sortedUserSets.size(); i++) {
DataPoint prevUserSet = sortedUserSets.get(i - 1);
DataPoint nextUserSet = sortedUserSets.get(i);
double similarity = RoleUtils.jacquardSimilarity(currentUserSet.getPoints(),
prevUserSet.getPoints());
double nextSimilarity = RoleUtils.jacquardSimilarity(currentUserSet.getPoints(),
nextUserSet.getPoints());

if (Math.max(similarity, nextSimilarity) > maxSimilarity
&& Math.min(similarity, nextSimilarity) >= RoleUtils.jacquardSimilarity(
prevUserSet.getPoints(), nextUserSet.getPoints())) {
maxSimilarity = Math.max(similarity, nextSimilarity);
insertIndex = i;
}
}

if (insertIndex == -1) {
if (RoleUtils.jacquardSimilarity(currentUserSet.getPoints(),
sortedUserSets.get(0).getPoints())
> RoleUtils.jacquardSimilarity(sortedUserSets.get(0).getPoints(),
sortedUserSets.get(1).getPoints())) {
sortedUserSets.add(0, currentUserSet);
} else {
sortedUserSets.add(currentUserSet);
}
} else {
sortedUserSets.add(insertIndex, currentUserSet);
}
}
}

return sortedUserSets;
}

public static List<UniqueRoleSet> jaccSortUn(List<UniqueRoleSet> miningSets) {

List<UniqueRoleSet> sortedUserSets = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -398,8 +398,8 @@ private MainMenuItem createRolesMenu() {
MainMenuItem roleMenu = createMainMenuItem("PageAdmin.menu.top.roles", GuiStyleConstants.CLASS_OBJECT_ROLE_ICON_COLORED
);
createBasicAssignmentHolderMenuItems(roleMenu, PageTypes.ROLE);
roleMenu.addMenuItem(new MenuItem("PageAdmin.menu.top.roles.mining", PageRoleMiningSimple.class));
roleMenu.addMenuItem(new MenuItem("RBAM", PageRoleMiningRBAM.class));
// roleMenu.addMenuItem(new MenuItem("PageAdmin.menu.top.roles.mining", PageRoleMiningSimple.class));
// roleMenu.addMenuItem(new MenuItem("RBAM", PageRoleMiningRBAM.class));
roleMenu.addMenuItem(new MenuItem("Mining", MainPageMining.class));

return roleMenu;
Expand Down

This file was deleted.

This file was deleted.

0 comments on commit 010acaa

Please sign in to comment.