Each group has a 1:1 relationship with a policy.
Policy Rulesets
A policy can have one or more Policy Rules, also known as a set of rules that we refer to as a Policy Ruleset.A ruleset holds rules, and each rule holds conditions.
Throughout the documentation, we use Policy, Ruleset, and Policy Ruleset interchangeably. They all refer to the same thing, and the official name is Policy Ruleset, however we often just say Policy or Ruleset for short.
Imported Attribute Rulesets
When you connect an integration and import groups or resources, Provisionr automatically creates a Policy Ruleset for each group or resource that you imported.Count of Imported Attributes
IT Department Attribute Data
Policy Ruleset for IT Department Attribute
Policy Rule for IT Department Attribute
Policy Condition for IT Department Attribute Rule
Policy User Lifecycle
A Policy Ruleset has a list of Policy Users — a many-to-many mapping to Directory Users. This list is recalculated on a recurring schedule so new users with matching conditions are added and users that no longer match are deprecated. When a User is attached to a Ruleset, the relationship is stored in the Policy Users database table. The benefit of having a dedicated relationship table is lifecycle tracking that provides valuable data for auditability:- When the user was added —
created_at - When a user’s metadata changed and disqualified them —
expires_atis set for a graceful transition - When the user is scheduled to be removed —
expires_at - When the user was removed —
deleted_at - The current relationship state —
state - Which rule they qualified for —
rule_id
Policy Conditions
A Policy Ruleset can have an unlimited number of Rules, and each rule can have an unlimited number of Conditions. This allows you to create custom rulesets with as much granularity as you need. A Condition is similar to an equation where we evaluate the left and right side with an operator and determine if the result is true (matched) or false (not matched). If a user matches every condition in a rule, they are considered a qualified user. In other words, this and that. If a user matched in the past but no longer matches, they are considered a disqualified user. Any user that doesn’t match all conditions is ignored. A user can qualify for any one of the Rules to be added as a Policy User. In other words, this or that.Rules combine with or — a user who matches any rule qualifies.
Typical ruleset with multiple rules and conditions
Sales division. A custom Sales Region dimension can narrow it further: a US Country Sales Team attribute uses a single rule with two conditions, both of which must match.
California Sales Account Executives attribute pins the audience down to one team with four conditions, all of which must be true.
Each additional condition narrows a rule to a more precise audience.
Identity Conditions
An Identity condition is used for string matching values in the integration identity profile data from a vendor’s API response. When you create an Identity Condition, you will choose an existing Integration and specify the key that you want to evaluate (ex.department). You will choose which operator to use (ex. equals) and provide the string value that you are looking for (ex. IT).
You have already seen how we imported the profile data from the integration API and created Dimensions and Attributes based on the keys and values in that profile data. Each of those imported rules uses an Identity Condition.
During each background sync job, Provisionr will look at all Identities (user data from a specific Integration) and return all users that have a metadata key with the corresponding value based on the operator evaluation logic. In other words, if {this} {equals} {that} then evaluate as true.
Condition Operators
We support several condition operators for string evaluation.equalsnot(equal to)division {not} Finance
empty(null)title {empty}(null or empty string)
exists(not null)employeeNumber {exists}(not null and not empty string)
greater(than or equal to)created_at {greater} 2026-01-01
less(than)expired_at {less} 2025-12-31
prefix(starts with)title {prefix} Seniorortitle {prefix} Sr.title {prefix} VPtitle {prefix} Vice President
suffix(ends with)email {suffix} @example.comemail {suffix} [email protected]email {suffix} @vendorcorp.comtitle {suffix} Manager
contains(keyword)title {contains} Engineertitle {contains} Manager
Real World Example for Identity Conditions
In the example above, we have a rule for the IT Applications team where thetitle {contains} IT Applications. This means that any user that has a job title with the keyword “IT Applications” will match this condition. Remember that they have to match all of the other conditions for the rule as well.
Directory Identity Data
Considerations for String Matching
Identity string matching is a raw string evaluation with no lifecycle management. If the value is renamed in the Integration, the condition silently breaks with no visibility to admins or end users. If you reuse the same logic in multiple places or the value is predictable, use an Attribute Condition instead. This gives you a single source of truth and a selectable menu of choices rather than repeated raw strings.Your policies are mapped to the ID instead of the string value, so if the value changes, you can update the attribute’s display name and all of the policies that reference that attribute will automatically be updated.
Commercial Sales becomes Mid-Market Sales — the next sync detects the new value and creates its attribute, while the old imported condition stops matching because no user carries the old value anymore. Rather than silently dropping access, Provisionr surfaces the affected users for review and hands them to the deprecation lifecycle, which grants a grace period before any access is removed — enough for a role change that needs a few days of overlapping access.
You can also use expires_at to set a date for when the attribute should be automatically deprecated and no longer used in policies, and any users that were attached to that attribute will be automatically detached after the expiration date is reached.
Attribute Conditions
Attribute conditions are the most powerful and flexible condition type for defining rules based on user attributes in a single source of truth location. Since each Directory Attribute has its own ruleset with rules and conditions, it acts as a reusable ruleset that allows you to define string matching in a single source of truth for your organization logic, and reuse that Attribute in different rules across your groups and resources without repeating your string matching logic in multiple places. You’ve already seen how we imported the profile data from the integration API and created Dimensions and Attributes based on the keys and values in that profile data. Each of these attributes are now usable in any rule as an Attribute Condition. You can create additional custom Directory Dimensions and Attributes that each have a Ruleset that you can add Rules and Conditions to that is reusable for attaching to various groups and resources. This is useful for granular dimensions that are now available in your HRIS that you want to use across multiple groups and resources. For example, you could create aTeam dimension and create an Attribute for each team in your organization. Then you can use that attribute in any rule for any group or resource.
This is also useful for special projects, sales regions, or who should have access to data about a specific customer. If you’re use to creating a Google group and adding everyone to that Google Group, you want use a Provisionr attribute instead and then use that attribute in your group rulesets. This allows you to have a single source of truth for who should have access to that customer or project, and you can use that attribute across multiple groups and resources without having to manage the membership of a Google Group, Google Drive folder, Slack channel, etc.
Now that you have a database record for each Attribute, you can use that record’s ID by selecting it from a dropdown menu when creating a condition instead of having to remember the exact string that you need to match.
Manager Conditions
You can choose a manager and all users that report to this person will be added. A rule can mix condition types. Pairing a manager condition with an Identity Condition keeps only the reports that also match a profile field. ANorCal Account Team rule might combine the two:
expires_after_days.
User Conditions
If you have a corner case where a user does not have one or more attributes that qualify them for a rule, you can select one of your Directory Users from the drop down list.Rule Priority
When you have multiple rules in a ruleset, you can assign a priority from 1 (evaluated first) to 99 (evaluated last), similar to firewall rule or access control list (ACL) priority. The default priority for custom rules if not set is 42 and the default priority for imported attribute rules is 88. And yes, both of those are easter egg pop culture references. The reason for the default priority for imported attribute rules is that we want to encourage you to use custom rules with higher priority (lower number) to override the imported rules if needed, rather than having to edit the imported rules directly. Rules with the same priority are evaluated based on the greatest number of users matched, from highest to lowest. This is designed to ensure that rules that apply to entire departments are evaluated first before rules for a smaller team. It allows you to keep your rule sprawl to a minimum and allows you to see which rules don’t have any effect. A user may qualify for multiple rules. They are associated as a Policy User based on the Policy Rule that they qualify for that has the lowest priority value. For example, if they qualify for Rule X with Priority 10 and Rule Y with Priority 42, their Policy User relationship is associated with Rule X. Rule qualification happens during each scheduled sync or on-demand for a specific group. If they no longer qualify forRule X, their Policy User relationship will be deprecated and scheduled for expiration based on the expires_after_days value. An administrator can always change the expiration date to be sooner or extend it to be later, or deactivate them immediately if needed.
When their association with Rule X expires, a new Policy User with Rule Y will be created. Since this happens during the sync job, this is only for audit log purposes to show timestamps of when they qualify for each. Unless the role associated with each Rule is different, the user will not notice any disruption or changes.
Short-Term Access
When you want to add a rule with conditions that are only valid for a short period of time, you can set theexpires_at value. After the expires_at value has passed, the rule and associated conditions are automatically soft deleted, and any users that previously matched the rule’s conditions will be detached from the attribute.
The expires_at value is useful for temporary access, such as a contractor that only needs access for 90 days, a special project, vacation coverage that only needs access for a few days or weeks, or access for an employee that has changed job roles and is supporting the old team for the next few weeks or months while transitioning to the new role.
You do not need to worry about manually removing the rule or conditions after the access is no longer needed, and you can have confidence that there will not be any lingering access after the expiration date has passed.
The expiration is evaluated during each sync for any expires_at values that have passed, not at the exact moment that the expires_at value is reached. This means that there will be a delay between when the rule expires and when the users are detached. The maximum delay is based on your sync frequency: with daily sync the maximum delay is 24 hours, with hourly sync it is 1 hour, and with 15-minute sync it is 15 minutes.
Policies define who qualifies — but how do those qualifications get applied to actual groups? Let’s look at the groups and resources those policies are applied to. Continue reading: Groups & Resources →