Source: management-system/src/backend/server/iam/utils/roleMappings.js

import { roleMappingsMetaObjects } from '../../../shared-electron-server/data/iam/role-mappings.js';
import { roleMetaObjects } from '../../../shared-electron-server/data/iam/roles.js';
import store from '../../../shared-electron-server/data/store.js';

/**
 * cleans up role mappings and roles members when a user is deleted
 *
 * @param {String} userId - the id of the user
 */
export const ensureCleanRoleMappings = async (userId) => {
  if (roleMappingsMetaObjects.users[userId]) {
    const roles = roleMappingsMetaObjects.users[userId];
    delete roleMappingsMetaObjects.users[userId];
    roles.forEach((role) => {
      const index = roleMetaObjects[role.roleId].members.findIndex(
        (member) => member.userId === userId
      );
      if (index > -1) {
        roleMetaObjects[role.roleId].members.splice(index, 1);
      }
      store.update('roles', role.roleId, roleMetaObjects[role.roleId]);
    });

    store.setDictElement('roleMappings', {
      roleMappings: {
        users: { ...roleMappingsMetaObjects.users },
      },
    });
  }
};