2010-06-05 59 views
0

我试图成为一名优秀的开发人员,并将我的担忧分开。我有一个ASP.NET MVC项目,包含我所有的Web代码和一个包含所有模型代码的DAL项目。关注与认证的分离

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

对于该网站,当前是从Windows用户名(来自HttpContext.Current.User.Identity)派生而来的,但这显然是一个网络问题,不应该耦合到DAL。

松散耦合身份验证的最佳模式是什么? DAL是否应该向MVC代码请求用户名,或者MVC是否告诉DAL?其中一个或另一个有优点还是缺点?

谢谢!

回答

1

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

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