2010-11-23 29 views
2

對於MVC 2項目的默認成員資格提供程序,我可以參考User.Identity.UserName按照默認情況下創建的任何項目。我不想這樣做 - 想用我自己的表格。所以,我實現了System.Web.Security.MembershipProvider類。我實現了,按照在網絡上和那麼多帖子的唯一的事情,是ValidateUser(string username, string password)如何引用我自己的表與MVC Controller.User屬性?

我可以很容易地看到這種接受的用戶名和密碼字符串,訪問我的數據庫上下文(LINQ到實體,實際上dotConnect提供商MySQL),並檢查用戶名和密碼 - 很簡單。

但是,我怎麼能做出Controller.User對象用我自己的表的屬性。例如,我的表叫做Staff。它有StaffID(PK),FirstName,LastName等。我如何訪問當前上下文用戶的StaffID如下?

int id = User.StaffID; 

我發現這個職位由Matt Wrock,但我真的不能執行用戶類,特別是IsInRole方法的意義。這個對象何時構造,構造函數參數從何而來?

回答

2

我不喜歡會員提供商,所以我儘量避免不惜一切代價處理。如果您不想使用控制器中的User,則可以執行以下操作。

創建一個基礎控制器,讓所有的控制器都繼承它。

在你的基地控制器,添加一個名爲要使用(可能是LINQ的2 SQL類型),無論何種類型CurrentUser財產。

重寫你的基地控制器上的Initialize方法和運行邏輯,以獲得正確的用戶,如果用戶進行身份驗證。將CurrentUser設置爲正確的用戶。現在,您可以從任何繼承自基本控制器的控制器訪問該屬性。

public BaseController : Controller 
{ 
    public MyUserEntity CurrentUser {get; set;} 

    protected override void Initialize(RequestContext requestContext) 
    { 
      CurrentUser = null; 
      if (requestContext.HttpContext.User.Identity.IsAuthenticated) 
      { 
       var userRepository = new UserRepository(); 
       CurrentUser = userRepository.GetUser(requestContext.HttpContext.User.Identity.Name); 
      } 

    } 

} 

,並使用它:

public StaffController : BaseController 
{ 
     public ActionResult View() 
     { 
      var staffRepository = new StaffRepository(); 
      var staff = staffRepository(CurrentUser.StaffID); 
      return View(staff); 
     } 
} 
1

如果你想讓它工作,你必須做很多事情。

你需要定義自己的類下降從

GenericIdentity 

下一步,你需要定義自己的類,從

GenericPrincipal 

下降這一類可以有屬性你」 d喜歡引用(例如StaffID)。

Thne你需要掛接到實際的認證過程和你的GenericPrincipal後代的實例分配到「用戶」屬性。

然後每次引用如果你要投它是爲了獲得進入附加屬性的類型時。

((MyPrincipal)User).StaffID 

與您到目前爲止所做的相比,這是相當多的工作。

但它是可行的。

+0

你將如何 「鉤到實際的認證過程」?你的意思是在MembershipProvider的ValidateUser方法中嗎? – 2010-11-23 22:53:59

+0

你會在HttpModule中實現OnAuthenticate事件,並在那裏做你的東西。僅供參考 - 堅持使用ASP.NET提供的認證機制比從事完全不同的工作更好(從長遠來看)。這是定義你自己的GenericPrincipal後裔,並沿着這條路線比完全避免它更好。成員資格提供者只是ASP.NET內置機制的一個實現。如果它不適合你,只需實施你自己的。從長遠來看,它將會付出很大的代價。 ASP.NET/WCF應用程序具有相同的基礎結構 – 2010-11-24 20:38:09

相關問題