工作流许可条件匹配

Workflow permissioning criterias matching

目前,我有一个工作流程 table 非常复杂,其中包含相互组合的多个值。在权限模型中为正确的用户找到正确的批准者基本上是一个工作流 这是工作流程的简化示例 table

Country Department Role Approver
ALL ALL ALL Bob
UK IT Developper Tim
US IT Developper Mike
ALL ALL Analyst John

这些工作流程步骤始终遵循先决条件:

  1. 总是存在符合所有条件的默认批准人
  2. 任何条件匹配都优先于所有条件
  3. 如果没有条件匹配,它将属于默认批准人

我有用户需要根据上述矩阵进行审批

User Country Department Role
U1 UK IT UX designer
U2 US HR Analyst

我正在尝试找出如何提取以下匹配项:

User Approver Reason
U1 Bob User U1 does not match the criterias so its climb to the default approver
U2 Tim User U2 match workflow step because Tim validate all UK Developpers belonging to IT department

当然,对于这个例子,几乎没有标准,所以一个简单的 if / else 就可以解决它。 但我有 6 个标准,我相信如果应用这种幼稚的方法,它们将达到大量的组合。

在这种情况下,规则引擎会应用这个问题吗? (比如流口水?) 我认为引擎会将用户/和工作流步骤列表作为事实。 在这种情况下应该做出更适用的决定 table 吗? 在构建问题方面的任何帮助将不胜感激:)

这是一个将用户与其批准国家相匹配的非常简单的示例

rule "Has country approver"
when
    $user : User( $country : country )
    $wf : WorkflowStep(country == $country) from $userAccess.steps
then
    //take the approver for the matching step
    $userAccess.setApprover($wf.getApprover());
    
    //insertLogical ?
end

规则引擎非常适合您的解决方案,但您必须决定如何使用它。

您提供的直接使用 Drools 的示例非常低级,它可以工作,但需要您在 DRL 中编写规则。

由于您已经知道您的评估是无状态的并且您的输入按字面格式设置为 table,因此我认为决策 Table 更合适。鉴于您有 two 种决策 Table、Drools 和 DMN。

我建议您尝试使用 DMN,因为它更容易上手,Kogito 提供了一个 quick-start 让您可以试验整个系统,甚至可以为此编写一个测试场景,这基本上是您的第二个table.