In a recent data modeling project where entities were highly interconnected with each other, our team at Nulli had to go through multiple iterations of designing a data model using the Neo4j arrows.app and then implementing it into ForgeRock Identity Management (IDM) to test if the model satisfied the project requirements. Several iterations required minor changes to the data model, while others needed a complete overhaul. This created a tedious and error-prone process, regardless of the number of changes in the data model between iterations. For every iteration, the data model design team had to work with the engineering team to verify the new ForgeRock IDM representation of the data model, further delaying the implementation.
To simplify the implementation phase in each iteration, we developed a proprietary tool called Graph2IDM. The following is an overview of how to use Graph2IDM to automate the implementation of the data model in IDM in just a few steps.
We chose to work with arrows.app by Neo4j since it allows us to draw the data model as a directed edge-labeled graph with properties on both nodes and relationships. The image below shows a sample data model consisting of the User and Application object types along with the singleton and JSON type properties. The image also includes annotations to provide the metadata for both the object types and their properties. Note that usesApp is the property that relates the User object type to the Application object type.
Sample Data Model:
Because we used the arrows.app, it allowed us to export the data model as a Cypher Create query seamlessly. Once exported, we executed the Cypher Create query into the Neo4j database instance.
In this step, we extract the object schema file from our IDM instance. The IDM object schema file is found at <Base_IDM_Directory>/conf/managed.json. A benefit of Graph2IDM is that it works with any existing managed.json file. It updates the IDM schema file to incorporate the data model designed in Step 1. Even if we are working with a new IDM deployment, we still have the default managed.json file that is shipped with IDM.
Note that we did not define the whole schema in our design; instead, we only created the objects and properties that are relevant to the data model updates we wish to make. These updates can include either new or existing objects and properties.
Extracted Source managed.json File:
To generate a new IDM schema file, Graph2IDM connects to the Neo4j instance we made in Step 2, and uses a managed.json file from Step 3. This new IDM schema file updates the schema defined in the managed.json file to include the changes designed in Step 1.
We are now ready to deploy the newly generated IDM schema file into our IDM instance and test the latest data model design.
Deployed New managed.json File:
Once deployment is complete, we now see the schema updates in our IDM admin user interface. The updates provided by the Graph2IDM tool can be seen in the Managed Objects section of the IDM Admin interface. The screen shows the list of managed objects defined in the managed.json file, including the newly created Application object. The details of each managed object type and the updated list of attributes designed in the Sample Data Model can also be seen on this interface.
Application Object Introduced in IDM:
Properties for Application Object:
usesApp Property Introduced for User Object: