【问题标题】:Seed an admin role with password in MVC 5?在 MVC 5 中使用密码播种管理员角色?
【发布时间】:2015-04-27 00:05:28
【问题描述】:

我正在尝试使用实体框架在 MVC5 中植入管理员角色,但似乎我们不再使用 WebSecurity 和 SimpleRoleProvider。

我发现了一篇很棒的帖子,标题为:MVC5 Seed Roles and Users

我通读了这篇文章并尝试实施它,但我在两个地方遇到了问题。在提供的示例中,它们仅展示了如何添加用户名,而该网站需要 电子邮件密码 才能注册。

这是我以前在 MVC4 中的做法:

protected override void Seed(PhotoAlbum.Models.UsersContext context)
{
    seedUserAccounts();
}

private void seedUserAccounts()
{
    WebSecurity.InitializeDatabaseConnection("UsersContext", "UserProfile", "UserId", "UserName", autoCreateTables: true);

    SimpleRoleProvider roles = (SimpleRoleProvider)Roles.Provider;

    if (!roles.RoleExists("admin"))
    {
        roles.CreateRole("admin");
    }

    SimpleMembershipProvider membership = (SimpleMembershipProvider)Membership.Provider;

    if (membership.GetUser("account", false) == null)
    {
        membership.CreateUserAndAccount("account", "pass");
    }

    if (!roles.IsUserInRole("account", "admin"))
    {
        roles.AddUsersToRoles(new[] { "account" }, new[] { "admin" });
    }
 }

我的问题:

我想知道如何更改以下方法以允许使用电子邮件地址和密码。

   protected override void Seed(BlogEngine.Models.ApplicationDbContext context)
   {

       if (!context.Roles.Any(r => r.Name == "Admin"))
       {
           var store = new RoleStore<IdentityRole>(context);
           var manager = new RoleManager<IdentityRole>(store);
           var role = new IdentityRole { Name = "Admin" };


           manager.Create(role);
       }

       if (!context.Users.Any(u => u.UserName == "myUsername"))
       {
           var store = new UserStore<ApplicationUser>(context);
           var manager = new UserManager<ApplicationUser>(store);
           var user = new ApplicationUser { UserName = "myUsername" };

           manager.Create(user, "ChangeItAsap!");
           manager.AddToRole(user.Id, "Admin");
        }
    }

【问题讨论】:

  • 您已经设置了密码 (ChangeItAsap!)。您可以通过初始化程序添加其他字段: var newUser = new ApplicationUser { UserName = "admin", Email = "newuser@domain.com", PhoneNumber = "6085551234", MustChangePassword = false };
  • 这行得通。除非您想发布答案,否则我会在一段时间内发布工作代码。再次感谢

标签: entity-framework asp.net-mvc-5 seed asp.net-roles


【解决方案1】:

正如 Steve Greene 上面所说,我已经差不多了……我确实做了一些改变。这是我的最终解决方案:

  // makes an admin role if one doesn't exist
  if (!context.Roles.Any(r => r.Name == "Admin"))
  {
        var store = new RoleStore<IdentityRole>(context);
        var manager = new RoleManager<IdentityRole>(store);
        var role = new IdentityRole { Name = "Admin" };


        manager.Create(role);
   }
   // if user doesn't exist, create one and add it to the admin role
   if (!context.Users.Any(u => u.UserName == "admin"))
   {
        var store = new UserStore<ApplicationUser>(context);
        var manager = new UserManager<ApplicationUser>(store);
        var user = new ApplicationUser { UserName = "me@me.com", Email = me@me.com" };

        manager.Create(user, "password");
        manager.AddToRole(user.Id, "Admin");
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 2015-09-14
    • 2013-10-17
    • 2018-10-19
    • 2015-07-29
    相关资源
    最近更新 更多