«Пользователь может делать X, если пользователь владеет объектом Y»: реализовать логику в проверке модели или логике контроллера?
-
27-10-2019 - |
Вопрос
Рассмотрим, например, логику «Пользователь может редактировать или удалять только комментарий, созданный им».
Действия с моим контроллером будут повторять логику проверки того, может ли текущий авторизованный пользователь повлиять на комментарий.Пример
родовое словоКонечно, я могу объединить эту логику в метод, чтобы я не копировал / вставлял этот фрагмент;однако если взять этот код из контроллера и поместить его в ValidationAttribute, мое действие станет меньше, и для него будет проще писать тесты.Пример
родовое словоПодходит ли проверка модели для этой работы?Мне нравится убирать эту озабоченность из контроллера Action;но в этом случае это может еще больше усложнить ситуацию.Это особенно верно, если учесть, что это действие является частью RESTful API и должно возвращать другой код состояния HTTP в зависимости от ошибок проверки в ModelState.
Есть ли в этом случае «лучшие практики»?
Решение
Лично мне кажется, что это выглядит неплохо, но вы увлекаетесь аннотациями.Я думаю, что это не относится к вашему уровню представления, и это должно обрабатываться вашим уровнем обслуживания.
У меня было бы что-то вроде:
родовое слово