DDD Политики безопасности пользователей - PullRequest
7 голосов
/ 09 марта 2009

У меня есть класс RentalProperty, который выглядит примерно так:

class RentalProperty
{
    Money MonthlyRent;
    List<MaintainenceCall> MaintainenceCalls;
}

Насколько я понимаю, используя DDD для изменения MonthlyRent, я бы получил RentalProperty, изменил свойство MonthlyRent и вызвал RentalPropertyRepository.Save (). Тот же процесс будет обработан для добавления нового MaintainenceCall.

Проблема, с которой я столкнулся, заключается в том, что, например, мастер должен иметь возможность добавлять MaintainenceCall, но ему нельзя разрешать изменять MonthlyRent. Как мне реализовать эту (а также другую подобную) политику безопасности?

Ответы [ 2 ]

11 голосов
/ 20 марта 2009

Короче говоря, вы должны применять это бизнес-правило непосредственно в вашей модели. В вашем случае, прямо в свойстве получателя и установщика MonthlyRent. Мы все знаем, насколько это сложно, с множеством проверок и уровней безопасности; так вот для чего предназначены спецификации.

В пьесе DDD представлена ​​концепция Технические характеристики , предназначенная именно для того, чтобы сфокусировать свет на самой модели. Сначала вы устанавливаете свой геттер и сеттер, как описано выше, чтобы получить функциональность. Затем, во время рефакторинга, постарайтесь сделать модель чище, абстрагируя длинный код получения / установки в классы спецификации.

Employee employee = 
    employeeRepository.findEmployee(employeeID);

Specification employeeCanModifyRent = new
    Specification(
        new EmployeeHasAccessToManagement()
        , new EmployeeHasAccessToMoney());

if(employeeCanModifyRent.isSatisfiedBy(employee))
{
  rentService.changeRent();
}
else
{
  throw new exception("Access denied.");
}

Чтение кода делает совершенно очевидным, что именно делает код. Это основная концепция DDD сама по себе. Спецификации должны быть очень простыми и понятными.

Этот код взят из Дизайн, управляемый доменом. Быстро , краткое и быстрое чтение для DDD. Это действительно короткая и приятная книга о DDD, которая требует чтения в течение нескольких часов. Всего 100 страниц или около того.

4 голосов
/ 09 марта 2009

АОП. PostSharp действительно хорош для подобных вещей.

Потому что безопасность действительно сквозная проблема.

...