Skip to content

BulkId reference resolving

Captain-P-Goldfish edited this page Nov 16, 2019 · 6 revisions

Feature available since 1.1.0

This page will describe what is necessary to set bulkId's within a resource and what are the restrictions. Unfortunately the resolving for bulkId's was inaccurately defined in RFC7644 which is why I was forced to make my own assumptions in specific cases.

  1. bulkId references can only be set on complex-type definitions that define the following two attributes:
{
  "name": "value",
  "description": "The id of the SCIM resource representing this reference.",
  "type": "string",
  "mutability": "readWrite",
  "returned": "default",
  "uniqueness": "none",
  "multiValued": false,
  "caseExact": false,
  "required": true
},
{
  "name": "$ref",
  "description": "The URI of the SCIM resource representing",
  "type": "reference",
  "mutability": "readWrite",
  "returned": "default",
  "uniqueness": "none",
  "multiValued": false,
  "caseExact": false,
  "required": false,
  "referenceTypes": [
    "resource"
  ]
}

it is very important that the "$ref" attribute is of type reference and contains the value "resource" in the "referenceTypes" attribute. Furthermore the "value" attribute must be of type string otherwise it is not possible to set a bulkId reference.

This is a limitation that has been implicitly but not directly defined within RFC7644. Handling of bulkId references are described in a hardcoded way for the group-members and the EnterpriseUser-manager attribute. the bulkId reference is set on the value attribute but the definition of a resource-reference has been set on the "$ref" attribute. That is why bulkId-references are only resolved on complex types that honor this pattern.

circular references

I was not able to find any circular reference example that would make any sense. Thats why the framework does not try to resolve circular references but punishes them directly with a http status of 409(CONFLICT) if detected.

self references

If a bulkId-reference is a referencing its own operation a bad request is returned with a scimType of "invalidValue"

Clone this wiki locally