Есть ли такая вещь, как безопасность домена в DDD? - PullRequest
1 голос
/ 23 февраля 2012

Я прочитал ответ на следующий вопрос: Проектирование и безопасность на основе домена , но я не был удовлетворен ответом.

Доступ к методам или командам прост, что вы могли бынаверное просто ограничат на роль или что-то подобное.Упрощенный пример, где команда действительна как для пользователя в роли A, так и для B, если x < 100, но действительна только для пользователя B, если x >= 100, где x является параметром в команде.Куда должна идти эта проверка?Должно ли приложение проверять параметры перед выполнением команды или домен должен знать о ролях и тому подобное?

Я ясно заявляю?

1 Ответ

3 голосов
/ 23 февраля 2012

Это беспокойство команды? Я имею в виду, что проверка безопасности естественно вписывается в домен? Когда команда имеет одно и то же намерение во всем ограниченном контексте, тогда я думаю, что соответствующий совокупный корень должен обеспечить ее достоверность в определенном контексте.

Сценарий, который вы упомянули, звучит для меня как бизнес-правила, а не просто проверка прав. Поэтому я бы поставил чек на уровне домена как часть AR.

Я бы также проверил на уровне инфраструктуры, может ли пользователь выполнить команду, но это изящно обрабатывает отказ. Как то так

var ar=repository.Get(id);
if (ar.CanAddMoney(User,amount)) ar.AddMoney(amount,User)
else handleForbiddenAction();

Конечно, это очень расплывчатое решение смутной проблемы. Это так сильно зависит от сложности домена, что я думаю, что единственный правильный ответ: «это зависит».

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

...