我正在开发一个基于MVVM的Winforms项目(.NET 4),与安全相关,应用程序通过Active Directory进行身份验证,然后使用基于角色的安全性来确定对程序不同部分的访问权限。在大多数地方,安全性是使用PrincipalPermissionAttribute实现的,如下所示:
<PrincipalPermissionAttribute(SecurityAction.Demand, Role:="Managers")> _
Public Sub Save() Implements IProductsViewModel.Save
mUOW.Commit()
End Sub
正如您从接口实现中可以看出的那样,这个特定的Sub位于ViewModel中。PrincipalPermissionAttribute正在检查当前用户(Thread.CurrentPrincipal)是否处于Manager角色。
这引出了我的问题:安全检查(如上所述)应该在Domain Model中进行吗?
当我自己思考时,我有两种相互冲突的观点:
1)尽可能使领域模型无知于其他关注点,以减少复杂性和依赖性。(保持安全性,或者在ViewModel中实现)。
2)领域模型在某种程度上是“最后一道防线”的地方。如果我在领域模型中实现安全性,那么我知道即使另一个层次的安全性失败,领域模型也应该能够捕获到它。
那么,你认为是在领域模型中实现安全性还是不实现呢?