Chapter 3. Groups and Roles

Groups are entities that can contain other group or identity objects. They can be associated in a tree like organizational structures. Those don't need to be hierarchical only as single group can be a member of many other groups (can have many parents). Possible relationships between groups are shaped with group types. It can be configured which different group types can be associated or even which group types can or can not contain identity objects. Groups have unique names per group type. This means you can have two groups with the same name but different group type.

Roles are direct typed connections between Identity and Group objects. If you think about a sentence: "John is the Manager of XX Team" what matters is the context. So "John (Identity) is the Manager (RoleType) of XX Team (Group)". The whole sentence describes the Role that John has. This type of information is hard to map with typical Group object as John can be a manager of several different groups and other identities (Marry, Jack, Stan...) can have the same RoleType in context of different groups (XY Team, YY Team). Within each Realm (concept of Realms is described later) we can define several RoleType objects with unique names. Each Role defines a unique combination of Identity, Group and RoleType within Realm. Role concept is very powerful but its not natural in all identity store types. While quite easy to map in a relational database it doesn't fit into every LDAP tree present in organizations. Because of this Role support is optional in the API level