代码之家  ›  专栏  ›  技术社区  ›  user650922

代码第一种子Asp。net标识

  •  0
  • user650922  · 技术社区  · 10 年前

    我正在为一个已经存在了几个月的项目制定一个新的要求。我正在使用代码优先(EF6)和Asp。net身份。我需要在seed方法中添加一个新的用户角色,并将此角色附加到管理员。 如何在种子中为管理员添加新角色? 下面是我的seed方法的代码片段。

     protected override void Seed(myDbContext context)
        {
    if (!context.Roles.Any())
            {
                var userManager =
                    new UserManager<AppUser, Guid>(
                        new UserStore<AppUser, AppRole, Guid, AppUserLogin, AppUserRole, AppUserClaim>(context));
                var roleManager = new RoleManager<AppRole, Guid>(new RoleStore<AppRole, Guid, AppUserRole>(context));
    
                var adminRole = new AppRole() {Name = "admin"};
                roleManager.Create(adminRole);
    
    
                var admin = new Admin()
                {
                    UserName = "test@test.com",
                    EmailConfirmed = true,
                    SecurityStamp = Guid.NewGuid().ToString()
                };
                admin.Roles.Add(new AppUserRole()
                {
                    RoleId = adminRole.Id
                });
    
    
                userManager.Create(admin, "pwd");
    
                // user.Roles.Add(new IdentityUserRole { RoleId = userRole.Id, UserId = user.Id });
    
                base.Seed(context);
            }
    
        }
    
    2 回复  |  直到 10 年前
        1
  •  0
  •   Steve Greene    10 年前

    如果您有一个实时应用程序并运行了迁移,那么您的代码将无法运行!上下文。角色。Any()将为false,因为您现在有了角色。要使脚本幂等,请执行以下操作:

    protected override void Seed(myDbContext context)
    {
    
        var userManager = new UserManager<AppUser, Guid>(new UserStore<AppUser, AppRole, Guid, AppUserLogin, AppUserRole, AppUserClaim>(context));
        var roleManager = new RoleManager<AppRole, Guid>(new RoleStore<AppRole, Guid, AppUserRole>(context));
    
        // see if this role exists -- repeat for all roles
        if (!context.Roles.Any(r => r.Name == "admin"))
        {
            var adminRole = new AppRole() {Name = "admin"};
            roleManager.Create(adminRole);
        }
    
        // see if the user exists -- repeat for all users
        if (!context.Users.Any(u => u.UserName == "test@test.com")
        {
            var admin = new Admin()
            {
                UserName = "test@test.com",
                EmailConfirmed = true,
                SecurityStamp = Guid.NewGuid().ToString()
            };
            userManager.Create(admin, "pwd");
        }
    
        // see if the user has the role -- repeat for all roles for user, all users
        if (!userManager.IsInRole(admin.Id, "admin")
        {
             userManager.AddToRole(admin.Id, "admin")
        }
    
        ...
    
        base.Seed(context);
    
    }
    
        2
  •  0
  •   user650922    10 年前

    易于理解的添加了else if条件并创建了新角色