2016-12-06 124 views
0

我正在使用身份的ASP.NET MVC来保护我的web应用程序。我创建了一个“canEdit”角色,并有5个用户想要在数据库中播种。如何将多个用户分配给角色的种子数据库?

我原本想这是:

bool AddUserAndRole(ERPWAG.Models.ApplicationDbContext context) 
    { 
     IdentityResult ir; 
     var rm = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context)); 
     ir = rm.Create(new IdentityRole("canEdit")); 

     var um = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context)); 
     var user = new ApplicationUser() 
     { 
      UserName = "[email protected]", 
     }; 
     ir = um.Create(user, "password"); 
     if (ir.Succeeded == false) 
      return ir.Succeeded; 
     ir = um.AddToRole(user.Id, "canEdit"); 
     return ir.Succeeded; 

     var user2 = new ApplicationUser() 
     { 
      UserName = "[email protected]", 
     }; 
     ir = um.Create(user, "password"); 
     if (ir.Succeeded == false) 
      return ir.Succeeded; 
     ir = um.AddToRole(user2.Id, "canEdit"); 
     return ir.Succeeded; 

     var user3 = new ApplicationUser() 
     { 
      UserName = "[email protected]", 

     }; 
     ir = um.Create(user, "password"); 
     if (ir.Succeeded == false) 
      return ir.Succeeded; 
     ir = um.AddToRole(user3.Id, "canEdit"); 
     return ir.Succeeded; 

     var user4 = new ApplicationUser() 
     { 
      UserName = "[email protected]", 
     }; 
     ir = um.Create(user, "password!"); 
     if (ir.Succeeded == false) 
      return ir.Succeeded; 
     ir = um.AddToRole(user4.Id, "canEdit"); 
     return ir.Succeeded; 

     var user5 = new ApplicationUser() 
     { 
      UserName = "[email protected]", 
     }; 
     ir = um.Create(user, "password"); 
     if (ir.Succeeded == false) 
      return ir.Succeeded; 
     ir = um.AddToRole(user5.Id, "canEdit"); 
     return ir.Succeeded; 
    } 

我再Configuration.cs我种方法,称为更新数据库,并发表了一篇名为AddUserAndrole(context)

我的用户无法登录本网站。预先使用这些用户填充身份数据库并将其与角色关联起来的最佳方式是什么?

回答

1

有了这个,你可以通过一个单一的用户创建一个用户帐户,并将其分配给角色:

bool CreateDefaultUsers(YourApp.Models.ApplicationDbContext context, string uname, string uemail, string upass, string urole) 
    { 
     IdentityResult ir; 
     var um = new UserManager<ApplicationUser>(
      new UserStore<ApplicationUser>(context)); 
     var user = new ApplicationUser() 
     { 
      UserName = uname, 
      Email = uemail, 
     }; 
     ir = um.Create(user, upass); 
     if (ir.Succeeded == false) 
      return ir.Succeeded; 
     ir = um.AddToRole(user.Id, urole); 
     return ir.Succeeded; 
    } 

而且从你的种子叫它方法是这样的:

ir = CreateDefaultUsers(context, "Bob", "[email protected]", "Password1", "Publisher"); 

你或许可以弄清楚如何创建一个数组并遍历你的用户,如果你想或者只是重复呼叫8次与您的用户价值。

我还会考虑@Steve Greene发布的关于密码要求的内容。

[更新]

这个例子假设你不使用用户名的电子邮件。在任何情况下,该方法都是一样的。

0

假设你的代码运行并且记录被插入表中(首先检查),我打赌你的密码策略可能不允许“密码”。

搜索您的PasswordValidator规则。我的是:

// Configure validation logic for passwords 
manager.PasswordValidator = new PasswordValidator 
{ 
    RequiredLength = 8, 
    RequireNonLetterOrDigit = false, 
    RequireDigit = true, 
    RequireLowercase = true, 
    RequireUppercase = true, 
}; 

所以要么让你的密码符合规则或改变验证。

这里是播种的身份另一个链接:Seed Entities AND Users, Roles?

+0

感谢您的回答。在发布我的问题之前,我“清除”了电子邮件地址和密码。所以,密码是强大的,有一个大写字母,一个数字,一个特殊字符和所需的长度。 – SidC

+0

记录在数据库中? SignIn结果是否正确?你的问题在哪里? –

相关问题