Effective roles and effective assignments
Effective roles and effective assignments are virtual properties of a user object. IDM uses the relationships between objects to know when to recalculate the values of these properties.
The relationships between objects are configured using the notify
, notifySelf
, and notifyRelationships
settings for managed/realm-name_user
, managed/realm-name_role
, and managed/realm-name_assignment
. The queryConfig
property is used to configure which related objects to traverse for this calculation.
Calculation or recalculation is performed when IDM notifies the related objects that the roles or assignments for a managed user have been added, removed, or changed.
The following excerpt of the IDM managed object schema shows how these two virtual properties are constructed for each managed user object:
"effectiveRoles" : {
"type" : "array",
"title" : "Effective Roles",
"description" : "Effective Roles",
"viewable" : false,
"returnByDefault" : true,
"isVirtual" : true,
"queryConfig" : {
"referencedRelationshipFields" : ["roles"]
},
"usageDescription" : "",
"isPersonal" : false,
"items" : {
"type" : "object",
"title" : "Effective Roles Items"
}
},
"effectiveAssignments" : {
"type" : "array",
"title" : "Effective Assignments",
"description" : "Effective Assignments",
"viewable" : false,
"returnByDefault" : true,
"isVirtual" : true,
"queryConfig" : {
"referencedRelationshipFields" : ["roles", "assignments"],
"referencedObjectFields" : ["*"]
},
"usageDescription" : "",
"isPersonal" : false,
"items" : {
"type" : "object",
"title" : "Effective Assignments Items"
}
}
When a user references a role which references an assignment, that user automatically references the assignment in its list of effective assignments.
effectiveRoles
uses the roles
relationship to calculate the grants currently in effect, including any qualified by temporal constraints.
effectiveAssignments
uses the roles
relationship and the assignments
relationship for each role to calculate the current assignments in effect for that user. The synchronization engine reads the calculated value of the effectiveAssignments
attribute when it processes the user. The target system is updated according to the configured assignmentOperation
for each assignment.
When a user’s roles or assignments are updated, IDM calculates their effectiveRoles
and effectiveAssignments
based on the current value of their roles
property and the assignments
property of any roles referenced by that property. The previous set of examples showed the creation of a role employee
that referenced an assignment employee
and was granted to user bjensen. Querying that user entry would show the following effective roles and effective assignments:
curl \ --header "Authorization: Bearer <token>" \ --header "Accept-API-Version: resource=1.0" \ --request GET \ "https://<tenant-env-fqdn>/openidm/managed/realm-name_user/<bjensenUUID>?_fields=userName,roles,effectiveRoles,effectiveAssignments" { "_id": "ca8855fd-a404-42c7-88b7-02f8a8a825b2", "_rev": "0000000081eebe1a", "userName": "bjensen", "effectiveRoles": [ { "_refResourceCollection": "managed/realm-name_role", "_refResourceId": "2243f5f8-ed75-4c3b-b4b3-058d5c58fbb4" "_ref": "managed/realm-name_role/2243f5f8-ed75-4c3b-b4b3-058d5c58fbb4" } ], "effectiveAssignments": [ { "name": "employee", "description": "Assignment for employees.", "mapping": "managedUser_systemLdapAccounts", "attributes": [ { "assignmentOperation": "mergeWithTarget", "name": "employeeType", "unassignmentOperation": "removeFromTarget", "value": [ "employee" ] } ], "_rev": "0000000087d5a9a5", "_id": "46befacf-a7ad-4633-864d-d93abfa561e9" "_refResourceCollection": "managed/realm-name_assignment", "_refResourceId": "46befacf-a7ad-4633-864d-d93abfa561e9", "_ref": "managed/realm-name_assignment/46befacf-a7ad-4633-864d-d93abfa561e9" } ], "roles": [ { "_ref": "managed/realm-name_role/2243f5f8-ed75-4c3b-b4b3-058d5c58fbb4", "_refResourceCollection": "managed/realm-name_role", "_refResourceId": "2243f5f8-ed75-4c3b-b4b3-058d5c58fbb4", "_refProperties": { "_id": "93552530-10fa-49a4-865f-c942dffd2801", "_rev": "0000000081ed9f2b" } } ] }
In this example, synchronizing the managed/realm-name_user
repository with the external LDAP system defined in the mapping populates user bjensen’s employeeType
attribute in LDAP with the value employee
.