【问题标题】:MVC3 - Where is UserId and Roles informationMVC3 - UserId 和 Roles 信息在哪里
【发布时间】:2011-06-15 19:26:33
【问题描述】:

这是在 MVC3 中为我创建的示例项目的 Account/Membership 类生成的模型代码。我没有看到 UserId 字段/属性或角色信息.. 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; }
}

}

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 asp.net-membership class-design


    【解决方案1】:

    除非我误解了这个问题......

    这些模型与用户模型有关。

    UserId 和 Roles 正在处理身份验证和授权

    您很可能正在使用表单身份验证和默认的 ASP.NET 成员资格提供程序。

    如果要访问当前登录用户的UserId,需要在用户登录时将其添加到forms authentication ticket中,然后通过HttpContext.Current.Request.User.Identity访问即可。

    如果您使用 FormsAuthentication.SetAuthCookie,那么 Identity.Name 将指向您传递给 SetAuthCookie 的任何内容 - 这样您就可以传递 UserId。

    但大多数人(包括我自己)使用昵称/用户名作为 Identity.Name,因此您需要手动创建表单身份验证票证并将其添加到响应 cookie。

    要查看用户是否在某个角色中,请执行以下操作:

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

    这是标准的 ASP.NET 东西,不特定于 ASP.NET MVC。

    另外,如果您使用的是 Entity Framework 或 NHibernate 或 Linq2Sql 等 ORM,请不要映射成员表。

    创建您自己的用户表,该表有一个指向该表的 FK,然后您的用户表成为模型。

    内置的成员资格提供程序 API 将在幕后使用存储过程来执行您需要的功能。

    【讨论】:

      【解决方案2】:

      这是默认视图的模型 - 注册和更改密码。

      只有在配置了 roleprovider 的情况下才能获得角色。

      【讨论】:

      • 角色通过“Asp.net 配置”网站进行配置。 +
      • 我想我要问的是-如果我正在为其他视图编写其他模型并想使用登录用户的用户ID,当帐户中不存在用户ID时我该如何使用它型号?
      • 您可以创建账户模型。您展示的这些模型仅用于简单示例。这是一篇如何使用 IPrincipal 对象的好帖子:hanselman.com/blog/…
      • 这是使用标准成员 ASPNETDB.MDF 数据库。 userid 字段已存在于该数据库中。为什么我必须再次创建模型才能使用 UserId?对不起,如果我的问题本质上是初级的。我是初学者
      • 要在 SQL 数据库中存储用户成员资格和角色,请使用 aspnet_regsql.exe 应用程序或配置器页面。默认模板不包含用于检索用户 id 或 smth 的模型。只需使用标准 IPrincipal 对象即可访问此字段。
      猜你喜欢
      • 1970-01-01
      • 2015-07-13
      • 2013-10-04
      • 1970-01-01
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多