关注和身份验证的分离

时间:2010-06-05 22:14:27

标签: asp.net-mvc separation-of-concerns

我正在努力成为一名优秀的开发人员并将我的疑虑分开。我有一个包含所有Web代码的ASP.NET MVC项目,以及一个包含所有模型代码的DAL项目。

有时,DAL中的代码需要通过检查CurrentUser.IsAdmin之类的内容来检查当前用户是否有权执行某些操作。

对于网站,当前来自Windows用户名(来自HttpContext.Current.User.Identity),但这显然是网络问题,不应与DAL相关联。

松散地结合身份验证的最佳模式是什么? DAL应该向MVC代码询问用户名,还是MVC告诉DAL?是否有优点或缺点?

谢谢!

1 个答案:

答案 0 :(得分:1)

通常我会在控制器级别处理安全性,而不是在数据级别。如果你想在数据级别处理它,那么我将使用注入来为你的DAL提供当前用户或访问当前用户的方式。在这种情况下,它意味着在创建DAL实例时从Controller注入User对象。我有时这样做是为了审计,即当前用户可能是允许访问修改用户数据的角色的成员。在这种情况下,我想将进行更改的实际用户插入到审计表中。我会避免使用HttpContext.Current - 你应该使用控制器上的属性来注入它们,而不是让DAL从静态对象中获取它们。这将使您的DAL更容易测试。

在处理控制器中的安全性时,您可以使用AuthorizeAttribute或从中派生的自定义属性来实现您的跨领域安全问题。