Asp.net-Mvc

在 Web 層之外獲取目前的 Principal

  • January 7, 2013

我有以下 ntier 應用程序:MVC > 服務 > 儲存庫 > 域。我正在使用表單身份驗證。在我的 MVC 層之外使用 Thread.CurrentPrincipal 來獲取我的應用程序的目前登錄使用者是否安全,或者我應該使用 HttpContext.Current.User 嗎?

我問的原因是 Thread.CurrentPrincipal 似乎存在一些問題,但我謹慎地在 MVC 層之外添加對 System.Web 的引用,以防我將來需要提供非 Web 字型端。

更新

到目前為止,我一直在遵循收到的建議,將使用者名作為被呼叫方法的參數的一部分傳遞到服務中,這導致了對我最初問題的改進。我需要能夠檢查使用者是否在我的許多服務和域方法中處於特定角色。似乎有幾個解決方案,只是想知道哪個是最好的方法:

  1. 將整個 HttpContext.Current.User 作為參數傳遞,而不僅僅是使用者名。
  2. 在我的網路層之外呼叫 Thread.CurrentPrincipal 並使用它。但是如何確保它等於 HttpContext.Current.User?
  3. 堅持按照目前的建議傳遞使用者名,然後使用 Roles.IsUserInRole。這種方法的問題是它需要一個對 System.Web 的引用,我覺得這在我的 MVC 層之外是不正確的。

你會建議我如何進行?

我也不會這樣做,HttpContext.Current.User特定於您的 Web 層。

為什麼不將使用者名註入您的服務層?

將相關的使用者詳細資訊映射到新Class的以表示 LoggedInUser 並將其作為參數傳遞給您的業務層方法

public class LoggedInUser
{
  public string UserName { set;get;}
  //other relevant proerties
}

現在設置它的值並傳遞給你的 BL 方法

var usr=new LoggedInUser();
usr.UserName="test value ";  //Read from the FormsAuthentication stuff and Set
var result=YourBusinessLayerClass.SomeOperation(usr);

引用自:https://stackoverflow.com/questions/11543908