【发布时间】:2012-01-22 00:58:43
【问题描述】:
我有以下设置:MVC > 服务 > 存储库。现在我想让用户能够向文档添加注释。只有与文档关联的用户(作为所有者或审阅者)才能添加注释,因此在我的 NoteService 中,我执行以下操作以确保用户对所选文档具有权限:
public Note GetNewNote(int documentID)
{
if (!userHasAccess(Thread.CurrentPrincipal.Identity.Name))
throw new BusinessLogicException();
// Other stuff here...
}
我的问题是,我应该在哪里定义 userHasAccess 方法? NoteService 在检查文档时没有任何意义。我可以在 DocumentService 中定义它,但是 NoteService 需要访问它,这似乎引入了更多的耦合。
对我来说,在 Document POCO 本身上定义它然后调用 document.userHasAccess(...) 更有意义。这是一种好的做法,还是应该将域 POCO 限制为简单的属性?我担心这确实是验证的一部分,并且通过将方法放在 POCO 中,我将 Service 和 POCO 之间的验证分开。
我要确保我的应用程序易于维护和测试。任何关于我应该如何解决这个问题的建议都将不胜感激!
【问题讨论】:
-
userHasAccess 做了哪些检查?代码访问安全性可能对您有用。
-
它只是检查用户是否在 Document.Owners 或 Document.Reviewers 中 - 这些是 Document 和 Person 之间的多对多关系。
标签: asp.net-mvc asp.net-mvc-3 validation poco