我有一个在控制器和操作上使用授权属性的 ASP.NET MVC 应用程序。这一直运作良好,但出现了新的皱纹。
对象:装运
角色:运输、会计、一般用户
货件通过工作流程移动。在状态 A 中,它只能由 Shipping 编辑。在状态 B 中,它只能由会计编辑。
我有一个 ShipmentController 和一个 Edit Action。我可以放置一个 Authorization 属性来将 Edit 操作限制为仅这两个角色,但这并不能区分 Shipment 处于哪个状态。我需要在服务调用之前在操作中执行一些 Authorization 以确定用户是否真正被授权执行编辑操作。
所以我有两个问题:
1)在Action中获得授权的好方法是什么。Controller Action 调用服务,然后服务对 Shipment 对象进行适当的调用(更新数量、更新日期等)。我确定我希望 Shipment 对象不受任何授权要求的影响。另一方面,如果我希望服务对象知道授权,我并没有真正的把握。有什么好的模式吗?
2)我的问题实际上是糟糕设计的症状吗?我应该有一个 StateAshipmentController 和 StateBshipmentController,而不是 ShipmentController?我没有在 Shipment 对象中内置任何多态性(状态只是一个枚举),但也许我应该并且控制器应该反映这一点。
我想我正在寻求更通用的解决方案,而不是针对我的案例的特定解决方案。我只是想提供一个例子来说明这个问题。
谢谢!