У меня есть приложение PHP MVC. Бизнес-логика реализована на уровне сервиса и модели домена. Мой вопрос: где я должен выполнять проверки авторизации? В служебном слое? Или модель домена?
В обсуждении шаблона уровня обслуживания, http://martinfowler.com/eaaCatalog/serviceLayer.html, Мартин Фаулер предпочитает отделять логику приложения от "бизнес-логики". Первый входит в сервисный уровень, последний - в объекты домена.
Некоторые из моих правил авторизации сложны. Авторизация может зависеть от текущего пользователя, его ролей, состояния многих других несвязанных объектов и т.д. Они, похоже, принадлежат объектам домена или, в некоторых случаях, фабрикам для этих объектов.
Но в других случаях правила довольно просты. Например, "только супервизор может утвердить новую запись в доске объявлений". В этих случаях у меня возникает соблазн проверить авторизацию на сервисном уровне. Он устраняет требования безопасности и, помещая их в прослушиватель сервисного уровня (mock-able), мой код становится легче тестировать.
Итак, вопрос в том, должен ли я ставить простые проверки авторизации на уровне службы и более сложные в объектах домена? Или я прошу о неприятностях, разделив его на два слоя?
Итак, я переместил код аутентификации на уровень сервиса и обнаружил, что всего лишь несколько экземпляров, где мне еще нужно выполнить дополнительные проверки в модели. Для согласованности я мог бы вытащить эти чеки в сервисный слой, за счет производительности, но до сих пор я не ощущал необходимости.