【问题标题】:Create role for the first user in MVC 5在 MVC 5 中为第一个用户创建角色
【发布时间】:2015-04-30 17:28:00
【问题描述】:

我需要为数据库中的第一个用户创建“管理员”角色。这是我的代码:

public static void SetAdminForTheFirstUser()
        {
            using(var _db = new ApplicationDbContext())
            {
                string roleName = "Admin";
                var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
                if(!roleManager.RoleExists(roleName))
                {
                    var newRoleresult = roleManager.Create(new IdentityRole()
                    {
                        Name = roleName,
                    });
                    var userRole = new IdentityUserRole
                    {
                        UserId = _db.Profiles.FirstOrDefault().Id.ToString(),
                        RoleId = roleManager.FindByName(roleName).Id,                    
                    };
                }            
                _db.SaveChanges();
            }
        }

如果角色不存在,是否有更好的方法来检查角色并为第一个用户创建角色?

【问题讨论】:

  • 这是作为 Code First 迁移的一部分完成的,还是在其他地方调用?一些额外的上下文会有所帮助。
  • 这是 Code First 迁移的一部分。只是 MVC 5 项目的模板部分。然后是迁移。

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


【解决方案1】:

尝试将这些东西放入你的配置中(种子方法)。

protected override void Seed(Models.ApplicationDbContext context)
{
    ParameterSeeder.Seed(context);
    RoleSeeder.Seed(context);
    UserSeeder.SeedAdmin(context);
    CategorySeeder.SeedMain(context);
    CategorySeeder.SeedChild(context);
    ProductUnitSeeder.Seed(context);
    ProductSeeder.Seed(context);
    ...
}

您可以在相关播种机中指定您的部件:

internal static class RoleSeeder
{
    internal static void Seed(ApplicationDbContext context)
    {
        var idManager = new IdentityManager();

        // Create roles
        var roleAdmin = new AllesVersRole {Description = "Administrator", Name = "Admin"};
        var roleClient = new AllesVersRole {Description = "Clienten", Name = "Client"};

        // Seed
        AddRole(idManager, roleAdmin);
        AddRole(idManager, roleClient);

        context.SaveChanges();
    }

    private static void AddRole(IdentityManager idManager, AllesVersRole role)
    {
        if (!idManager.RoleExists(role.Name))
            idManager.CreateRole(role.Name, role.Description);
    }
}

我只能这样建议,因为它简单易调整

【讨论】:

    猜你喜欢
    • 2013-11-10
    • 2015-04-12
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 2018-05-14
    • 2013-10-17
    相关资源
    最近更新 更多