Estoy trabajando en un proyecto de Winforms (.NET 4) que se basa libremente en MVVM. Por motivos de seguridad, la aplicación se autentica en Active Directory y luego utiliza la seguridad basada en roles para determinar los permisos de acceso a diferentes partes del programa. La seguridad se implementa con el PrincipalPermissionAttribute en la mayoría de lugares, así:¿Deberían existir problemas de seguridad en el modelo de dominio?
<PrincipalPermissionAttribute(SecurityAction.Demand, Role:="Managers")> _
Public Sub Save() Implements IProductsViewModel.Save
mUOW.Commit()
End Sub
Como seguramente se puede decir de la implementación de la interfaz, esta Sub específica se encuentra en un modelo de vista. PrincipalPermissionAttribute comprueba si el usuario actual (Thread.CurrentPrincipal) tiene el rol de administrador.
Lo que me lleva a mi pregunta: ¿Se deberían hacer comprobaciones de seguridad (como las anteriores) en el Modelo de Dominio?
Tengo dos puntos de vista conflictivos al pensar en mí mismo:
1) Mantenga el modelo de dominio ignorantes de tantas otras preocupaciones como sea posible para reducir la complejidad y la dependencia. (Mantenga la seguridad fuera, tal vez implementado en ViewModel).
2) El modelo de dominio es, en cierto modo, el lugar donde "el dinero se detiene aquí". Si implemento seguridad en el modelo de dominio, entonces sé que incluso si falla la seguridad en otra capa, el modelo de dominio debería atraparla.
Entonces, ¿qué dices, seguridad en el modelo de dominio o no?
Algunos argumentos muy buenos para mantener la seguridad fuera del dominio, gracias. En cuanto al acceso a los datos en ViewModel, entiendo de dónde vienes y estoy de acuerdo. Estoy usando EF 4 y mi UOW realmente es solo un envoltorio alrededor de un ObjectContext. Utilizo un enfoque de "UOW por modelo de vista", p. cuando la Vista solicita un nuevo ViewModel, ViewModel trae consigo un UOW que se creó cuando el repositorio extrajo las entidades. La UOW rastrea automágicamente cualquier cambio realizado por ViewModel. Lo único que el ViewModel puede hacer con el UOW es decirle que se comprometa. –