如何为分配给角色的多个用户播种数据库?

时间:2016-12-06 17:36:41

标签: asp.net-mvc asp.net-identity

我使用带有Identity的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 = "user1@email.com",
        };
        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 = "user2@email.com",
        };
        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 = "user3@email.com",

        };
        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 = "user4@email.com",
        };
        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 = "user5@email.com",
        };
        ir = um.Create(user, "password");
        if (ir.Succeeded == false)
            return ir.Succeeded;
        ir = um.AddToRole(user5.Id, "canEdit");
        return ir.Succeeded;
    }

然后我在Configuration.cs的Seed方法中调用AddUserAndrole(context),称为update-database并发布。

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

2 个答案:

答案 0 :(得分: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", "bob@bobswebsite.com", "Password1", "Publisher");

如果您愿意,您可以弄清楚如何创建数组并迭代您的用户,或者只是使用您的用户值重复调用8次。

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

[更新]

此示例假定您没有使用电子邮件作为用户名。在任何情况下,方法都是相同的。

答案 1 :(得分: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?