Entitlements with variable sub-values - How best to accommodate them?

I’m setting up a Web Services application, which includes a type of entitlement called “skills”. Skills also have “levels”, and the level of your “skill” grants different permissions.

E.g. If a user has the skill “French” at level 1, they would be allowed to view tickets tagged with “French”, but unless they have level 2, they would not be able to respond to tickets. Or if they have skill “de-escalation training”, they might be matched to tickets based on how proficient they are in that skill. Users are expected to change in skill level frequently, and the levels are expected to range from 1-10.

It doesn’t seem like IIQ has a neat way to handle this sort of design in its Web Services connector. I had a few thoughts on how to do it, but each seemed to have its own drawbacks. Currently, the main goal I have is to be able to initialize skill levels correctly during initial assignment. I.e. when a new user starts, and requests the role “Kiln Service Agent”, they should have the skill “Kiln Engineering” given to them, alongside a default skill level of 5 plus all other permissions needed in the app. If someone had the role “Kiln Engineer”, they might start with “Kiln Engineering” at level 10. Managers can then tweak the levels as needed for their new starters, but you’d expect most people to keep to the default level assigned by their role.

Here are the main options I thought about:

1: Just treat each different skill + possible level as its own individual entitlement. This would technically work, but it would mean it was no longer simple for users to change their skill levels. As if we include the skill + level entitlement in a Bundle, then any change to the skill level made in the target application directly would get overwritten during Identity Refresh. It would also feel messy to have 10x the number of entitlements needed. Finally, it would cause clashes if a user ever held two roles with different default skill levels.

2: Assign all skills at level 1, and rely on manual provisioning/automated service ticket to fix users skill levels. Probably the simplest, but involves human intervention, and thus ideally avoided.

3: Utilise a custom object to map each role to what its expected starting skills are, and what their level should be. Then alter the provisioning plan to assign the skill its correct level. This is the one I personally want to do most, but I’m stymied by the fact that the provisioning plan for the application loses the context of what Sailpoint Bundles were assigned in that transaction, making it impossible to perform the lookup.

Are there any other approaches I’m potentially overlooking? And is there any guidance available for similar cases? Is option 3 possible, and if so, what might be required?

Any help to any part of this post greatly appreciated.

@JamesPan IIQ doesn’t support these type of dimensional relation for entitlements. It’s the same problem we have with Oracle EBS where they have Responsibilities ~ Application combination. You need to flatten the relationship, means import all skills~level combination. Then use your before rule in add entitlement to adjust the request call for provisioning and after rule in aggregation to convert it to skill~level like representation.

Note: Found a fix? Mark it as a solution! Want to say thanks? Give Kudos to anyone who helped you understand or solve the problem. Thanks..!!!

For anyone stumbling on this thread later:

I have elected to pursue a variation of option 3. We have a Custom object setup that stores each role and the initial skill level associated with that role. The role name is passed to the Before Operation Rule of the skill entitlement, which allows it to reference the Custom object in order to get the initial values.

The role name is passed via a Provisioning Policy for the role itself, with customisation to simply return the role name to Attribute Requests, surfacing that data into the Provisioning Plan. To do this, the checkbox to provision both entitlements and policy needs to be enabled.

There are obvious downsides to this approach
- No ongoing level awareness for rights access management
- Requires ongoing maintenance of the Custom object when creating new roles
- Additional effort when onboarding roles make sure the provisioning policy is there

Given there is no cleaner way I have found to handle this, I have decided this is the best way for our specific use case.