«Пользователь может делать X, если пользователь владеет объектом Y»: реализовать логику в проверке модели или логике контроллера?

StackOverflow https://stackoverflow.com/questions/9333916

  •  27-10-2019
  •  | 
  •  

Вопрос

Рассмотрим, например, логику «Пользователь может редактировать или удалять только комментарий, созданный им».

Действия с моим контроллером будут повторять логику проверки того, может ли текущий авторизованный пользователь повлиять на комментарий.Пример

родовое слово

Конечно, я могу объединить эту логику в метод, чтобы я не копировал / вставлял этот фрагмент;однако если взять этот код из контроллера и поместить его в ValidationAttribute, мое действие станет меньше, и для него будет проще писать тесты.Пример

родовое слово

Подходит ли проверка модели для этой работы?Мне нравится убирать эту озабоченность из контроллера Action;но в этом случае это может еще больше усложнить ситуацию.Это особенно верно, если учесть, что это действие является частью RESTful API и должно возвращать другой код состояния HTTP в зависимости от ошибок проверки в ModelState.

Есть ли в этом случае «лучшие практики»?

Это было полезно?

Решение

Лично мне кажется, что это выглядит неплохо, но вы увлекаетесь аннотациями.Я думаю, что это не относится к вашему уровню представления, и это должно обрабатываться вашим уровнем обслуживания.

У меня было бы что-то вроде:

родовое слово
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top