2

我在 youtrack 中创建了一个简单的状态机工作流来反映我们的流程。它使用三个状态值(已提交、进行中、已修复)并允许按顺序移动它们。

是否可以限制特定角色的某些状态更改?例如,角色 Reporter 应该只能在出现问题时创建问题并从“已修复”移动到“进行中”。

4

2 回答 2

3

更新:执行此任务的更好方法是在状态机中执行以下操作:

initial state Submitted { 
  on Approve[always] do { 
    assert loggedInUser.hasRole("Project Admin"): "Only Project Admins can Approve tasks."; 
  } transit to Open 
}

旧答案:直截了当的方式(在状态机本身内部):

initial state Submitted { 
  on Approve[loggedInUser.hasRole("Project Admin")] do {<define statements>} transit to Open 
}

虽然它会起作用,但它会默默地失败,所以用户不会知道它为什么不起作用。

更好的方法如下所示(为此,您必须创建无状态规则):

when State.oldValue == {Submitted} && State.becomes({Open}) { 
  assert loggedInUser.hasRole("Project Admin"): "Only Project Admins can Approve tasks."; 
}

在这种情况下,用户将收到您指定的错误消息。

请记住删除状态机中的条件,因为它已被提前检查,并且您不会收到任何错误消息,因为断言根本不会运行。

于 2015-04-25T09:17:38.820 回答
1

一个很老的问题,但我会尽力回答。您可以指定将在转换到/从特定状态时调用的保护表达式。在此表达式中,您可以验证用户权限。

于 2014-02-25T12:58:51.460 回答