# Interface IWorkflowRuleProvider OptimaJet.Workflow.Core.Runtime.IWorkflowRuleProvider Defines named authorization rules used to evaluate workflow participant identities for transition restrictions. Namespace: [OptimaJet.Workflow.Core.Runtime](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/) ```csharp public interface IWorkflowRuleProvider ``` ## Type Hierarchy - IWorkflowRuleProvider Current type - Derived interfaces - [ICustomWorkflowRuleProvider](https://api.workflowengine.io/core/OptimaJet.Workflow.Plugins.CustomWorkflowProviders/ICustomWorkflowRuleProvider/) - Implementing types - [ActiveDirectoryRuleProvider](https://api.workflowengine.io/active-directory-plugin/OptimaJet.Workflow.Plugins.ActiveDirectoryPlugin.Providers/ActiveDirectoryRuleProvider/) - [AggregatingRuleProvider](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/AggregatingRuleProvider/) - [DeactivatedWorkflowRuleProvider](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/DeactivatedWorkflowRuleProvider/) - [EmptyWorkflowRuleProvider](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/EmptyWorkflowRuleProvider/) - [WorkflowPluginWithRuleProvider](https://api.workflowengine.io/core/OptimaJet.Workflow.Plugins.CustomWorkflowProviders/WorkflowPluginWithRuleProvider-EnumActions-EnumActionsAsync-EnumConditions-EnumConditionsAsync-EnumRules-EnumRulesAsync/) - [BasicPlugin](https://api.workflowengine.io/core/OptimaJet.Workflow.Plugins/BasicPlugin/) ## Methods `List GetRules(string schemeCode, NamesSearchType namesSearchType)` Gets the rule names implemented by this provider for a process scheme. ### Parameters | Name | Type | Description | | --- | --- | --- | | `schemeCode` | `String` | The effective process scheme code used to resolve scheme-specific rules, or [null](https://learn.microsoft.com/dotnet/csharp/language-reference/keywords/null) when the caller has no process scheme context. | | `namesSearchType` | `NamesSearchType` | The filtering mode. [NamesSearchType.All](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/NamesSearchType/) includes rules excluded by provider-specific exclusion settings and is used for runtime rule resolution. [NamesSearchType.NotExcluded](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/NamesSearchType/) omits those rules, for example when the Designer builds its list of available rules. | ### Returns | Type | Description | | --- | --- | | `List` | A non-null list of rule names implemented by this provider for the requested scheme and filtering mode. | `bool Check(ProcessInstance processInstance, WorkflowRuntime runtime, string identityId, string ruleName, string parameter)` Determines whether a workflow participant identity satisfies a rule. ### Parameters | Name | Type | Description | | --- | --- | --- | | `processInstance` | `ProcessInstance` | The process instance whose state and parameters provide the evaluation context. | | `runtime` | `WorkflowRuntime` | The workflow runtime executing the evaluation. | | `identityId` | `String` | The application-defined value identifying the workflow participant to evaluate, such as a login, user name, database identifier, or another identifier understood by the provider. | | `ruleName` | `String` | The name of a rule advertised by [IWorkflowRuleProvider.GetRules(string, NamesSearchType)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). | | `parameter` | `String` | The provider-defined rule parameter. During standard restriction evaluation, this is the value from [ActorDefinition.Value](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Model/ActorDefinition/) after workflow substitutions have been applied. | ### Returns | Type | Description | | --- | --- | | `Boolean` | [true](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) if `identityId` belongs to the set defined by the rule; otherwise, [false](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool). | ### Remarks The runtime calls this method when [IWorkflowRuleProvider.IsCheckAsync(string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) returns [false](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) for the same rule and scheme. `Task CheckAsync(ProcessInstance processInstance, WorkflowRuntime runtime, string identityId, string ruleName, string parameter, CancellationToken token)` Asynchronously determines whether a workflow participant identity satisfies a rule. ### Parameters | Name | Type | Description | | --- | --- | --- | | `processInstance` | `ProcessInstance` | The process instance whose state and parameters provide the evaluation context. | | `runtime` | `WorkflowRuntime` | The workflow runtime executing the evaluation. | | `identityId` | `String` | The application-defined value identifying the workflow participant to evaluate, such as a login, user name, database identifier, or another identifier understood by the provider. | | `ruleName` | `String` | The name of a rule advertised by [IWorkflowRuleProvider.GetRules(string, NamesSearchType)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). | | `parameter` | `String` | The provider-defined rule parameter. During standard restriction evaluation, this is the value from [ActorDefinition.Value](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Model/ActorDefinition/) after workflow substitutions have been applied. | | `token` | `CancellationToken` | The token supplied by the current workflow operation to observe cancellation. | ### Returns | Type | Description | | --- | --- | | `Task` | A task whose result is [true](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) if `identityId` belongs to the set defined by the rule; otherwise, [false](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool). | ### Remarks The runtime calls this method when [IWorkflowRuleProvider.IsCheckAsync(string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) returns [true](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) for the same rule and scheme. `IEnumerable GetIdentities(ProcessInstance processInstance, WorkflowRuntime runtime, string ruleName, string parameter)` Gets all workflow participant identities that satisfy a rule. ### Parameters | Name | Type | Description | | --- | --- | --- | | `processInstance` | `ProcessInstance` | The process instance whose state and parameters provide the lookup context. | | `runtime` | `WorkflowRuntime` | The workflow runtime executing the lookup. | | `ruleName` | `String` | The name of a rule advertised by [IWorkflowRuleProvider.GetRules(string, NamesSearchType)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). | | `parameter` | `String` | The provider-defined rule parameter. During standard actor calculation, this is the value from [ActorDefinition.Value](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Model/ActorDefinition/) after workflow substitutions have been applied. | ### Returns | Type | Description | | --- | --- | | `IEnumerable` | A non-null sequence of application-defined workflow participant identities. Each value must use the same identity representation accepted by [IWorkflowRuleProvider.Check(ProcessInstance, WorkflowRuntime, string, string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). | ### Remarks The runtime calls this method when [IWorkflowRuleProvider.IsGetIdentitiesAsync(string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) returns [false](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) for the same rule and scheme. `Task> GetIdentitiesAsync(ProcessInstance processInstance, WorkflowRuntime runtime, string ruleName, string parameter, CancellationToken token)` Asynchronously gets all workflow participant identities that satisfy a rule. ### Parameters | Name | Type | Description | | --- | --- | --- | | `processInstance` | `ProcessInstance` | The process instance whose state and parameters provide the lookup context. | | `runtime` | `WorkflowRuntime` | The workflow runtime executing the lookup. | | `ruleName` | `String` | The name of a rule advertised by [IWorkflowRuleProvider.GetRules(string, NamesSearchType)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). | | `parameter` | `String` | The provider-defined rule parameter. During standard actor calculation, this is the value from [ActorDefinition.Value](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Model/ActorDefinition/) after workflow substitutions have been applied. | | `token` | `CancellationToken` | The token supplied by the current workflow operation to observe cancellation. | ### Returns | Type | Description | | --- | --- | | `Task` | A task whose result is a non-null sequence of application-defined workflow participant identities. Each value must use the same identity representation accepted by [IWorkflowRuleProvider.Check(ProcessInstance, WorkflowRuntime, string, string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). | ### Remarks The runtime calls this method when [IWorkflowRuleProvider.IsGetIdentitiesAsync(string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) returns [true](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) for the same rule and scheme. `bool IsCheckAsync(string ruleName, string schemeCode)` Indicates whether the runtime should call [IWorkflowRuleProvider.CheckAsync(ProcessInstance, WorkflowRuntime, string, string, string, CancellationToken)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) instead of [IWorkflowRuleProvider.Check(ProcessInstance, WorkflowRuntime, string, string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) for a rule. ### Parameters | Name | Type | Description | | --- | --- | --- | | `ruleName` | `String` | The name of a rule advertised by [IWorkflowRuleProvider.GetRules(string, NamesSearchType)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). | | `schemeCode` | `String` | The effective process scheme code used to resolve the rule. | ### Returns | Type | Description | | --- | --- | | `Boolean` | [true](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) to use [IWorkflowRuleProvider.CheckAsync(ProcessInstance, WorkflowRuntime, string, string, string, CancellationToken)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/); [false](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) to use [IWorkflowRuleProvider.Check(ProcessInstance, WorkflowRuntime, string, string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). | ### Remarks This choice is independent of the identity lookup mode returned by [IWorkflowRuleProvider.IsGetIdentitiesAsync(string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). `bool IsGetIdentitiesAsync(string ruleName, string schemeCode)` Indicates whether the runtime should call [IWorkflowRuleProvider.GetIdentitiesAsync(ProcessInstance, WorkflowRuntime, string, string, CancellationToken)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) instead of [IWorkflowRuleProvider.GetIdentities(ProcessInstance, WorkflowRuntime, string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) for a rule. ### Parameters | Name | Type | Description | | --- | --- | --- | | `ruleName` | `String` | The name of a rule advertised by [IWorkflowRuleProvider.GetRules(string, NamesSearchType)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). | | `schemeCode` | `String` | The effective process scheme code used to resolve the rule. | ### Returns | Type | Description | | --- | --- | | `Boolean` | [true](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) to use [IWorkflowRuleProvider.GetIdentitiesAsync(ProcessInstance, WorkflowRuntime, string, string, CancellationToken)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/); [false](https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool) to use [IWorkflowRuleProvider.GetIdentities(ProcessInstance, WorkflowRuntime, string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). | ### Remarks This choice is independent of the rule-checking mode returned by [IWorkflowRuleProvider.IsCheckAsync(string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). ## Remarks A rule supports two related operations. [IWorkflowRuleProvider.Check(ProcessInstance, WorkflowRuntime, string, string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) determines whether one workflow participant identity satisfies the rule, while [IWorkflowRuleProvider.GetIdentities(ProcessInstance, WorkflowRuntime, string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) returns all identities that satisfy it. The runtime uses these operations when validating [RestrictionDefinition](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Model/RestrictionDefinition/) instances and when calculating the participants allowed to execute a transition. Implementations advertise their rule names through [IWorkflowRuleProvider.GetRules(string, NamesSearchType)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). For each advertised rule, [IWorkflowRuleProvider.IsCheckAsync(string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) selects between [IWorkflowRuleProvider.Check(ProcessInstance, WorkflowRuntime, string, string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) and [IWorkflowRuleProvider.CheckAsync(ProcessInstance, WorkflowRuntime, string, string, string, CancellationToken)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/), while [IWorkflowRuleProvider.IsGetIdentitiesAsync(string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) independently selects between [IWorkflowRuleProvider.GetIdentities(ProcessInstance, WorkflowRuntime, string, string)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/) and [IWorkflowRuleProvider.GetIdentitiesAsync(ProcessInstance, WorkflowRuntime, string, string, CancellationToken)](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowRuleProvider/). The rule-specific parameter normally originates from [ActorDefinition.Value](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Model/ActorDefinition/). During standard runtime evaluation, workflow substitutions are applied before the resulting value is passed to this provider. [Previous IWorkflowExternalParametersProvider](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/IWorkflowExternalParametersProvider/) [Next NamesSearchType](https://api.workflowengine.io/core/OptimaJet.Workflow.Core.Runtime/NamesSearchType/)