我有一个使用控制器和操作的授权属性的ASP.NET MVC应用程序.这一直很好,但新的皱纹已经出现了.
对象:装运
角色:运输,会计,一般用户
货物通过工作流程移动.在状态A,它可以通过装运编辑.在状态B,它可以由会计编辑.
我有一个装运控制器和一个编辑动作.我可以将授权属性限制为只有这两个角色的编辑操作,但这并不区分装运的状态.在服务调用之前,我需要在操作中做一些授权,以确定用户是否真的有权执行编辑动作.
所以我留下了两个问题:
1)什么是在Action中有权限的好方法.控制器操作调用服务,然后服务对装运对象进行适当的调用(更新数量,更新日期等).我确信我想要装运对象与任何授权要求无关.另一方面,如果我想要服务对象知道授权,我没有真正的把握.有没有什么好的模式呢?
2)我的问题实际上是坏设计的症状吗?我应该有一个StateAShipmentController和StateBShipmentController,而不是ShipmentController?我没有在Shipment对象中内置任何多态(状态只是一个枚举),但也许我应该也可能控制器应该反映出来.
我想我是在更一般的解决方案之后,而不是一个特定的解决方案.我只想举一个例子来说明这个问题.
谢谢!