TL;DR:如何向转换添加自定义约束(即安全投票者)?
我的应用程序需要一些工作流管理系统,所以我想尝试 Symfony 的新Workflow Component。让我们以拉取请求工作流程为例。
在此示例中,仅描述状态及其转换。但是如果我想向此工作流程添加其他约束怎么办?我可以想象一些限制:
虽然在这种情况下您可以使用事件,但我认为这不是处理它的最佳方法,因为事件是在$workflow->apply(). 我想事先知道是否允许用户更改状态,以便我可以隐藏或禁用该按钮。(不是这样的)。
LexikWorkflowBundle通过向步骤(转换)添加角色部分解决了这个问题。切换到这个捆绑包可能是一个好主意,但我想弄清楚如何在没有这个捆绑包的情况下解决这个问题。
添加自定义实体约束(“超过 1 年的 PR 不能重新打开”)和安全约束(“只有管理员可以接受 PR ”,也许通过使用 Symfony 的安全投票者)到转换的最佳方法是什么?
更新: 澄清一下:我想向我的工作流程添加权限控制,但这并不一定意味着我想将其紧密耦合到工作流程组件。我想坚持良好的做法,因此给定的解决方案应该尊重单一责任原则。