Я работаю над проектом Winforms (.NET 4), который свободно основан на MVVM. В целях безопасности приложение проходит проверку подлинности в Active Directory, а затем использует безопасность на основе ролей для определения разрешений на доступ к различным частям программы. Безопасность реализована с использованием атрибута PrincipalPermissionAttribute в большинстве мест, например:
<PrincipalPermissionAttribute(SecurityAction.Demand, Role:="Managers")> _
Public Sub Save() Implements IProductsViewModel.Save
mUOW.Commit()
End Sub
Как вы, вероятно, можете сказать из реализации интерфейса, этот конкретный Sub находится в ViewModel. PrincipalPermissionAttribute проверяет, находится ли текущий пользователь (Thread.CurrentPrincipal) в роли диспетчера.
Что приводит к моему вопросу: следует ли проводить проверки безопасности (такие как выше) в модели предметной области?
У меня есть два противоречивых мнения, когда я думаю об этом сам:
1) Держите модель предметной области в неведении о многих других проблемах, чтобы уменьшить сложность и зависимость. (Сохраняйте безопасность, возможно, реализовано во ViewModel).
2) Модель предметной области, в некотором смысле, является местом, где «доллар здесь останавливается». Если я реализую безопасность в доменной модели, то я знаю, что даже если безопасность на другом уровне не срабатывает, доменная модель должна его поймать.
Итак, что вы скажете, безопасность в доменной модели или нет?