网站初始化时创建默认用户/管理员 - 身份

时间:2016-09-28 03:30:05

标签: c# asp.net asp.net-identity

我在asp.net领域非常棒。所以我的问题可能在互联网的任何地方都得到了解答,但我们都不了解流程创建。这是问题所在。

我试图创建简单的网站项目',当该网站启动时,如果该表尚不存在,它应该在数据库内创建所有必要的身份表。然后我将角色添加到表中,并将一个用户设置为此表的超级管理员。

任何人都可以帮我解决此问题或分享有关此问题的任何链接。

1 个答案:

答案 0 :(得分:15)

我假设你使用的是ASP.NET MVC。

您可以使用Database Initialization为数据库设定种子。

public class MyDBInitializer : CreateDatabaseIfNotExists<ApplicationDBContext>
{
    protected override void Seed(ApplicationDBContext context)
    {
        base.Seed(context);
    }
}

在种子方法上,您可以填充数据库并为您的应用程序创建默认用户。

protected override void Seed(ApplicationDBContext context)
{
    // Initialize default identity roles
    var store = new RoleStore<IdentityRole>(context);
    var manager = new RoleManager<IdentityRole>(store);               
    // RoleTypes is a class containing constant string values for different roles
    List<IdentityRole> identityRoles = new List<IdentityRole>();
    identityRoles.Add(new IdentityRole() { Name = RoleTypes.Admin });
    identityRoles.Add(new IdentityRole() { Name = RoleTypes.Secretary });
    identityRoles.Add(new IdentityRole() { Name = RoleTypes.User });

    foreach(IdentityRole role in identityRoles)
    {
         manager.Create(role);
    }

    // Initialize default user
    var store = new UserStore<ApplicationUser>(context);
    var manager = new UserManager<ApplicationUser>(store);
    ApplicationUser admin = new ApplicationUser();
    admin.Email = "admin@admin.com";
    admin.UserName = "admin@admin.com";

    manager.Create(admin, "1Admin!");
    manager.AddToRole(admin.Id, RoleTypes.Admin); 

    // Add code to initialize context tables

    base.Seed(context);
}

在您的Global.asax.cs上,您应该注册数据库初始化程序

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    GlobalConfiguration.Configure(WebApiConfig.Register);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
    Database.SetInitializer(new MyDBInitializer());
}

请注意,有不同类型的数据库初始化策略,其行为取决于数据库初始化程序。请检查上面的链接。