Skip to content

Commit

Permalink
Cleanup RBAC data generator
Browse files Browse the repository at this point in the history
1. Minor changes + add docs
  • Loading branch information
tchrapovic committed Apr 10, 2024
1 parent 765e6e9 commit ddde265
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
package com.evolveum.midpoint.ninja.action.mining.generator.context;

import static com.evolveum.midpoint.ninja.action.mining.generator.context.RbacGeneratorUtils.*;
import static com.evolveum.midpoint.ninja.action.mining.generator.object.InitialObjectsDefinition.getNoiseRolesObjects;

import java.io.IOException;
import java.util.*;
Expand Down Expand Up @@ -85,7 +86,7 @@ private void initialObjectsImport(@NotNull RepositoryService repositoryService)
importPlanktonRoles(initialObjectsDefinition, repositoryService, result, log);
importMultipliedBasicRoles(initialObjectsDefinition, repositoryService, result, log);
importBusinessRoles(initialObjectsDefinition, repositoryService, result, log);
importNoiseRoles(initialObjectsDefinition, repositoryService, result, log);
importNoiseRoles(repositoryService, result, log);
log.info("Initial role objects imported");
}

Expand Down Expand Up @@ -151,11 +152,10 @@ private void importPlanktonRoles(
}

private void importNoiseRoles(
@NotNull InitialObjectsDefinition initialObjectsDefinition,
@NotNull RepositoryService repositoryService,
@NotNull OperationResult result,
@NotNull Log log) {
List<RoleType> rolesObjects = initialObjectsDefinition.getNoiseRolesObjects();
List<RoleType> rolesObjects = getNoiseRolesObjects();
log.info("Importing noise roles: 0/{}", rolesObjects.size());
for (int i = 0; i < rolesObjects.size(); i++) {
log.info("Importing noise roles: {}/{}", i + 1, rolesObjects.size());
Expand Down Expand Up @@ -587,14 +587,13 @@ private void resolveContractors(int contractorsCount, RepositoryService reposito
*
* @param context The Ninja context.
* @param result The operation result used for tracking the operation.
* @param noise
* @param query The query for searching users.
* @param options The options for retrieving users.
* @throws RuntimeException If an error occurs during the process.
*/
public static void remakeUsersBusinessRoles(@NotNull NinjaContext context,
@NotNull OperationResult result,
GeneratorOptions generatorOptions,
@NotNull GeneratorOptions generatorOptions,
@Nullable ObjectQuery query,
@Nullable Collection<SelectorOptions<GetOperationOptions>> options) {

Expand Down Expand Up @@ -630,9 +629,9 @@ public static void remakeUsersBusinessRoles(@NotNull NinjaContext context,
private static void executeChangesOnUser(
@NotNull OperationResult result,
@NotNull PrismObject<UserType> object,
GeneratorOptions generatorOptions,
RepositoryService repository,
Log log) {
@NotNull GeneratorOptions generatorOptions,
@NotNull RepositoryService repository,
@NotNull Log log) {
String userOid = object.getOid();
PolyString name = object.getName();
if (name == null) {
Expand Down Expand Up @@ -662,15 +661,15 @@ private static void executeChangesOnUser(
List<ItemDelta<?, ?>> modifications = new ArrayList<>();
try {

RoleType noiseRole = getNoiseRole(generatorOptions.getAdditionNoise());
RoleType noiseRole = getAdditionNoiseRole(generatorOptions.getAdditionNoise());
if (noiseRole != null) {
modifications.add(PrismContext.get().deltaFor(UserType.class)
.item(UserType.F_ASSIGNMENT).add(createRoleAssignment(noiseRole.getOid()))
.asItemDelta());
}

for (AssignmentType assignmentType : inducement) {
boolean allowed = isExcluded(generatorOptions.getForgetNoise());
boolean allowed = isForgetRole(generatorOptions.getForgetNoise());
if (allowed) {
continue;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -262,18 +262,31 @@ static void resolveAuxRoles(@NotNull UserType user) {
}
}


/**
* Resolve chance.
* Determines whether a role should be forgotten based on a given chance.
* The chance is a percentage value between 0 and 100.
* A random number between 0 and 100 is generated and if it's less than the given chance, the method returns true.
*
* @param chance The chance to resolve.
* @return True if the chance is resolved, false otherwise.
* @param chance The chance (percentage) of forgetting a role.
* @return True if the role should be forgotten, false otherwise.
*/
public static boolean isExcluded(int chance) {
public static boolean isForgetRole(int chance) {
Random random = new Random();
return random.nextInt(100) < chance;
}

public static @Nullable RoleType getNoiseRole(int chance) {
/**
* Retrieves an additional noise role based on a given chance.
* The chance is a percentage value between 0 and 100.
* A random number between 0 and 100 is generated and if it's less than the given chance,
* a noise role is selected randomly from the list of noise roles.
* If the chance condition is not met or there are no noise roles, the method returns null.
*
* @param chance The chance (percentage) of getting an additional noise role.
* @return A RoleType object representing the additional noise role, or null if no role is selected.
*/
public static @Nullable RoleType getAdditionNoiseRole(int chance) {
Random random = new Random();
boolean b = random.nextInt(100) < chance;
List<RoleType> noiseRolesObjects = getNoiseRolesObjects();
Expand Down

0 comments on commit ddde265

Please sign in to comment.