获取Web层之外的当前Principal

Jam*_*mes 8 authentication asp.net-mvc forms-authentication iprincipal asp.net-mvc-3

我有以下ntier应用程序:MVC>服务>存储库>域.我正在使用Forms身份验证.在我的MVC层之外使用Thread.CurrentPrincipal来获取我的应用程序的当前登录用户或者我应该使用HttpContext.Current.User是否安全?

我问的原因是Thread.CurrentPrincipal似乎存在一些问题,但是我谨慎地在我的MVC层之外添加对System.Web的引用,以防我将来需要提供非web字体结尾.

更新

我一直在关注到目前为止收到的建议,将用户名传递给服务,作为被调用方法的参数的一部分,这导致了我原始问题的改进.我需要能够检查用户是否在我的许多Service和Domain方法中担任特定角色.似乎有几个解决方案,只是想知道哪个是最好的方法:

  1. 将整个HttpContext.Current.User作为参数传递,而不仅仅是用户名.
  2. 在我的Web层之外调用Thread.CurrentPrincipal并使用它.但是我如何确保它等于HttpContext.Current.User?
  3. 坚持传递目前为止建议的用户名,然后使用Roles.IsUserInRole.这种方法的问题是它需要引用System.Web,我觉得在我的MVC层之外是不正确的.

你怎么建议我继续?

Joe*_*zer 2

我也不会这样做,HttpContext.Current.User这是特定于你的网络层的。

为什么不将用户名注入到您的服务层中?