У меня есть приложение ASP.NET MVC, использующее атрибуты авторизации на контроллерах и действиях. Это хорошо работает, но появилась новая морщина.
Объект: Отгрузка
Роли: доставка, учет, общий пользователь
Отгрузка перемещается через рабочий процесс. В состоянии А его можно отредактировать только по отгрузке. В состоянии B его можно редактировать только с помощью учета.
У меня есть ShipmentController и действие Edit. Я могу поместить атрибут авторизации, чтобы ограничить действие "Правка" только этими двумя ролями, но это не отличает, из какого состояния находится отправка. Мне нужно будет сделать некоторую авторизацию внутри действия перед вызовом службы, чтобы определить, является ли пользователь действительно разрешено выполнять действие редактирования.
Итак, у меня остались два вопроса:
1) Каким образом можно получить авторизацию внутри Action. Действие контроллера вызывает службу, а затем служба выполняет соответствующие вызовы для объекта "Отгрузка" (количество обновлений, дата обновления и т.д.). Я точно знаю, что я хочу, чтобы объект отправки был агностик любых требований авторизации. С другой стороны, у меня нет реального понимания, если я хочу, чтобы объект службы знал об авторизации или нет. Есть ли хорошие шаблоны для этого?
2) Является ли моя проблема на самом деле симптомом плохого дизайна? Вместо ShipmentController я должен иметь StateAShipmentController и StateBShipmentController? У меня нет никакого полиморфизма, встроенного в объект Shipment (состояние - это просто перечисление), но, возможно, мне следует и, возможно, контроллеры должны это отразить.
Я предполагаю, что я использую более общие решения, а не конкретные для моего дела. Я просто хотел привести пример, чтобы проиллюстрировать вопрос.
Спасибо!