1

這是MVC3中爲我創建的示例項目的Account/Membership類生成的Model代碼。我沒有看到UserId字段/屬性或角色信息。 UserId和Roles信息在哪裏?MVC3 - UserId和Roles信息在哪裏

public class ChangePasswordModel 
{ 
    [Required] 
    [DataType(DataType.Password)] 
    [Display(Name = "Current password")] 
    public string OldPassword { get; set; } 

    [Required] 
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
    [DataType(DataType.Password)] 
    [Display(Name = "New password")] 
    public string NewPassword { get; set; } 

    [DataType(DataType.Password)] 
    [Display(Name = "Confirm new password")] 
    [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")] 
    public string ConfirmPassword { get; set; } 
} 

public class LogOnModel 
{ 
    [Required] 
    [Display(Name = "User name")] 
    public string UserName { get; set; } 

    [Required] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string Password { get; set; } 

    [Display(Name = "Remember me?")] 
    public bool RememberMe { get; set; } 
} 

public class RegisterModel 
{ 
    [Required] 
    [Display(Name = "User name")] 
    public string UserName { get; set; } 

    [Required] 
    [DataType(DataType.EmailAddress)] 
    [Display(Name = "Email address")] 
    public string Email { get; set; } 

    [Required] 
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string Password { get; set; } 

    [DataType(DataType.Password)] 
    [Display(Name = "Confirm password")] 
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 
    public string ConfirmPassword { get; set; } 
} 

}

回答

0

這是默認視圖的模型 - 註冊和更改密碼。

只有在配置了roleprovider的情況下才能執行角色。

+0

角色通過「Asp.net配置」網站進行配置。 + – ZVenue 2011-06-15 19:30:45

+0

我猜我在問什麼 - 如果我正在爲其他視圖編寫其他模型並希望使用已登錄用戶的用戶標識,那麼在帳戶模型中不存在userId時如何使用它? – ZVenue 2011-06-15 19:33:55

+1

您可以創建賬戶模型。您展示的這些模型僅用於簡單示例。下面是一個很好的帖子,介紹如何使用IPrincipal對象:http://www.hanselman.com/blog/IPrincipalUserModelBinderInASPNETMVCForEasierTesting.aspx – dimko1 2011-06-15 19:42:06

2

除非我誤解的問題...

那些模特是關心用戶模式

UserId和Roles正在處理認證和授權

很可能,您正在使用Forms身份驗證和默認的ASP.NET成員資格提供程序。

如果要訪問當前登錄用戶的UserId,則需要在簽入用戶時將其添加到表單身份驗證票證中,然後您可以通過HttpContext.Current.Request.User.Identity訪問它。

如果您使用FormsAuthentication.SetAuthCookie,那麼Identity.Name將指向您傳遞給SetAuthCookie的任何內容 - 因此您可以傳遞UserId。

但大多數人(包括我自己)都使用Identity.Name的暱稱/用戶名,因此您需要手動創建Forms Authentication工單並將其添加到響應Cookie中。

要查看某個用戶在一個角色,這樣做:

HttpContext.Current.User.IsInRole("Administrator")

這是標準的ASP.NET的東西,而不是具體到ASP.NET MVC。另外,如果您使用實體框架或NHibernate或Linq2Sql等ORM,則不要映射成員表。

創建您自己的用戶表,其中有一個FK指向該表,然後您的用戶表成爲模型。

內置的成員資格提供程序API將在後臺使用存儲過程來執行您所需的功能。