[midPoint] Blog: Road To Archetypes

Radovan Semancik radovan.semancik at evolveum.com
Tue Sep 24 09:38:59 CEST 2019


Dear midPoint community,

MidPoint is developed in evolutionary fashion. When we have started 
midPoint, many things were considered during the design. But we were not 
able to implement everything during early years of midPoint development. 
Therefore some ideas matured in the heads of midPoint developers until 
their time came. That is also the case of /archetypes/. The archetype 
functionality is one of the highlights of midPoint 4.0 “Gutenberg” 
<https://evolveum.com/midpoint-4-0-gutenberg/>. And this is the story 
how the idea of archetypes evolved during the course of midPoint 
development.

Identity management in early 2000s was all about users and accounts. 
First-generation IDM systems that were born during that period were 
quite simple. They could be simple because huge part of the 
functionality was hardcoded: user has accounts, roles apply to users and 
so on. But that was almost two decades ago and the world is quite a 
different place now. Identity management is no longer just about the 
users. Yes, users are still the primary focus. But we also have to 
manage business roles, application roles, policies, organizational 
units, teams, tenants, applications, mobile devices and everything else 
that has an “identity”. Which is pretty much everything.

MidPoint is a second-generation IDM system. When we designed midPoint we 
have learned from the mistakes of our predecessors. We have designed 
midPoint for the new flexible world of widespread identity management. 
Basic midPoint schema was designed with a focus on several fundamental 
objects: user, role, org and service. We have always considered those 
object types to be somehow abstract, to be more than meets the eye. For 
example, “user” usually represents physical persons. But it can also 
represent personas, remote actors and so on. The concept of “role” is 
even more flexible, representing different role types and privilege 
groupings. And “org” is a complete chameleon. It is used for 
organizational units, divisions, departments, sections, companies, 
teams, projects, classes, domains, realms, tenants and almost anything 
else that can group other objects. Unlike many other IDM systems, this 
flexibility is an integral part of midPoint design and midPoint had it 
almost from the day one.

However, one crucial element was missing. It was not very 
straightforward to distinguish a department from a project. Both of them 
are “org” objects and they look pretty much the same to all processing 
code in midPoint. The usual practice was to create a separate 
organization tree for functional organizational structure with divisions 
departments and section. And then have another organization tree that 
was used just for projects. This worked reasonably well for org-like 
objects. But there is a similar issue with users, roles and services. 
Those objects can be placed to organizational structures as well. But 
such configuration can get very complicated. Which means that it is 
difficult to maintain.

Those of you that are already familiar with the way how we work would 
probably know that we completely dislike things that are difficult to 
maintain. Efficient maintenance was the primary motivation to create 
midPoint in the first place. Therefore during the history of midPoint 
development we have made several attempts to improve the situation. 
There was always an employeeType property in midPoint schema. This 
particular property has deep historic roots. There was always a property 
like this in IDM systems. Therefore it was quite straightforward to 
introduce roleType, orgType and serviceType properties. Those properties 
later evolved into unified subtype. That worked quite well in practice. 
But that was not a complete solution. There was still more to do.

There is a mechanism in midPoint that is almost never seen in other IDM 
systems: metaroles 
<https://wiki.evolveum.com/display/midPoint/Metaroles>. Simply speaking, 
metaroles are roles applied to other roles. Even though the concept of 
metaroles may be quite strange, it is a very powerful mechanism. It can 
be used to distinguish objects. Metaroles can give objects a distinctive 
behavior and consistently apply differentiated policies to objects. This 
concept was an ideal foundation for a comprehensive mechanism to 
distinguish object types. We had that idea in our minds for quite 
awhile, but the crucial funding to develop the idea was missing. That 
funding finally came in midPoint 4.0 in a form of platform subscription. 
And that is how /archetypes/ were born. But more about it next time.

(Reposted from Evolveum blog <https://evolveum.com/road-to-archetypes/>)


-- 
Radovan Semancik
Software Architect
evolveum.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.evolveum.com/pipermail/midpoint/attachments/20190924/dcdf934b/attachment.htm>


More information about the midPoint mailing list