Я работаю над проектом 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) Модель предметной области - это своего рода место, где «деньги останавливаются». Если я реализую безопасность в модели предметной области, то я знаю, что даже если безопасность на другом уровне выйдет из строя, модель предметной области должна уловить это.
Итак, что вы скажете, безопасность в модели предметной области или нет?