You’re probably familiar with the concept of user profile metadata that is stored in your Identity Provider (IdP) and other systems. This is the data that we use to determine which users should have access to which groups and resources.Documentation Index
Fetch the complete documentation index at: https://docs.provisionr.io/llms.txt
Use this file to discover all available pages before exploring further.
Directory Identity Data
Directory Dimensions
The profile keys are the Dimensions (ex. department, division, cost center, job title). Provisionr automatically creates a Dimension database record for each unique metadata key that exists across all of the user profiles in your integration’s API response. For example, in Okta this includes all of the standard attributes and any custom profile attributes that your organization uses. These keys include business contact info (name, email, phone number, status) and organization data (job title, department, division, cost center, etc). For data safety reasons, we do not import postal address information at the street or postal code level. We do import the city, province/state and country code since some systems (ex. HR benefits applications) are specific to where each user lives.
Enabled Dimensions
Although we detect all of the dimensions that exist, we do not create PostgreSQL database records for the attributes unless you enable the dimension. This allows you to opt-in to how much data is stored in Provisionr. Each Dimension database record has anattributes_enabled boolean field that is false by default. If true, we aggregate a list of all of the unique values for that key (during each sync job) across all users and create an Attribute database record for each of them with a parent foreign key for dimension_id.
You only want to enable attributes for organizational dimensions that you want to use for policies. For example, you would not want to use employeeNumber or firstName for policies, but you likely want to use department and jobTitle. You can see a preview of all of the unique attributes for a dimension before enabling it to ensure that it contains useful data for policy conditions.
When your Workspace Integration is synced for the first time, dimensions are checked against a list of sensible defaults to enable for the respective vendor. For Okta, the following dimensions have attributes enabled by default:
organizationtitledivisiondepartmentcostCentercountryCodetimezone
Directory Dimensions from Integration Profile Data for Enabled Attributes
Directory Attributes
When we imported the Identities, we look at the profile data and determine all of the unique values for any given key for a dimension whereattributes_enabled {equals} true. All of the possible values of each dimension are called Attributes.
During each scheduled sync, we monitor for new values detected and automatically import a new Attribute. If a value is no longer detected, that Attribute is deprecated and will expire after X days based on the expires_after_days for the Dimension.
Attributes for Department Dimension
IT Department Attribute Data
Attribute Lifecycle Changes
If you use string-matching rules today, you are already working with Dimensions and Attributes — you just may not realize it. For example, a rule likedepartment equals engineering treats department as the Dimension and engineering as the Attribute.
Now imagine the department is renamed to Software Development. With string matching, you would need to find and update every rule that references Engineering. This is a common pain point for administrators, and one of the main reasons Attributes are a first-class citizen in the Provisionr policy engine.
Provisionr maintains a single source of truth for every Dimension and its unique Attribute values, detected automatically from the users in your IdP directory.
Instead of matching on the raw string department equals engineering, Provisionr stores a Dimension record for Department and an Attribute record for Engineering. Each record has its own ID, timestamps, and state, and rules reference these records by ID rather than by name. This means relationships between rules, dimensions, and attributes are managed through stable foreign-key references — not brittle string matching.
When an attribute name changes in your IdP (for example, from your HRIS), Provisionr detects the change and prompts you to update the display name in one place. Every rule that references that attribute is updated automatically. If you need to merge or split attributes, Provisionr handles that too — preserving the full relationship history and rule associations.
The result is better visibility into your policies as your organization evolves, no more chasing down scattered string-matching rules, and a clean audit trail of what changed, when, and why.
Dimension Deprecation
When a dimension is no longer detected in the API, we do not want to cause an unexpected breaking change. We use theexpires_after_days value for the dimension to set the expires_at value on the dimension and all child relationships including attributes, rules, and conditions.
This has the benefit of providing a log alert, notice period in the UI, and allows administrators time to update impacted rules.
If administrators need more time, you can update the expires_at for the dimension. You can also convert the dimension from an imported dimension to a custom dimension and preserve the existing attributes and attached users, however keep in mind that there is no longer a source of information so data is frozen in time unless you manually make changes.
After the expires_at has been reached, the dimension and all attributes, rules, and conditions will be deactivated (soft deleted). You can reactivate (soft restore) these records if needed.
API Reference
The relational database approach for dimensions and attributes means you can query users by specific attribute values without full JSON array parsing. The following API endpoints are available:/api/v1/directory/dimensions/api/v1/directory/dimensions/{ulid}/api/v1/directory/dimensions/{ulid}/attributes/api/v1/directory/attributes/{ulid}/api/v1/directory/attributes/{ulid}/users/api/v1/directory/users/api/v1/directory/users/{ulid}/attributes
Dimensions and Attributes give us the vocabulary for describing users. Next, let’s see how they’re used to build policies that determine who gets access to what.