我在youtrack中创建了一个简单的状态机工作流程来反映我们的流程。它使用三个状态值(已提交,正在进行,已修复)并允许按顺序移动它们。
是否可以限制特定角色的某些状态更改?例如,如果出现问题,Reporter应该只能创建问题并从“固定”移动到“进行中”。
答案 0 :(得分:3)
更新: 执行此任务的更好方法是在Statemachine内部进行以下操作:
initial state Submitted {
on Approve[always] do {
assert loggedInUser.hasRole("Project Admin"): "Only Project Admins can Approve tasks.";
} transit to Open
}
老答案: 直截了当的方式(在Statemachine本身内部):
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.";
}
在这种情况下,用户将收到您指定的错误消息。
请记住删除Statemachine中的条件,因为之前已经检查过,并且您将不会收到任何错误消息,因为断言根本不会运行。
答案 1 :(得分:1)
一个很老的问题,但我会尽力回答。 您可以指定在转换到特定状态或从特定状态转换时将调用的保护表达式。在此表达式中,您可以验证用户权限。