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