【问题标题】:Add new user and role to asp.net identity sample?将新用户和角色添加到 asp.net 身份示例?
【发布时间】:2016-02-11 01:24:06
【问题描述】:

我已安装 asp.net 身份示例 https://www.nuget.org/packages/Microsoft.AspNet.Identity.Samples 并尝试使用用户“Sadmin@example.com”创建一个新角色“SAdmin”。用户已创建,但“Sadmin”获得与“Admin”相同的角色

我已将 IdentityConfig.cs 修改为

    //Create User=Admin@Admin.com with password=Admin@123456 in the Admin role        
    public static void InitializeIdentityForEF(ApplicationDbContext db) {
        var userManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
        var roleManager = HttpContext.Current.GetOwinContext().Get<ApplicationRoleManager>();
        const string name = "admin@example.com";
        const string password = "Admin@123456";
        const string roleName = "Admin";

        const string Sname = "Sadmin@example.com";
        const string Spassword = "SAdmin@123456";
        const string SroleName = "SAdmin";

        //Create Super if it does not exist
        var Srole = roleManager.FindByName(SroleName);
        if (Srole == null)
        {
            Srole = new IdentityRole(roleName);
            var roleresult = roleManager.Create(Srole);
        }

        var Suser = userManager.FindByName(Sname);
        if (Suser == null)
        {
            Suser = new ApplicationUser { UserName = Sname, Email = Sname };
            var result = userManager.Create(Suser, Spassword);
            result = userManager.SetLockoutEnabled(Suser.Id, false);
        }

        // Add Suser to Role Admin if not already added
        var SrolesForUser = userManager.GetRoles(Suser.Id);
        if (!SrolesForUser.Contains(Srole.Name))
        {
            var result = userManager.AddToRole(Suser.Id, Srole.Name);
        }

        //Create Role Admin if it does not exist
        var role = roleManager.FindByName(roleName);
        if (role == null) {
            role = new IdentityRole(roleName);
            var roleresult = roleManager.Create(role);
        }

        var user = userManager.FindByName(name);
        if (user == null) {
            user = new ApplicationUser { UserName = name, Email = name };
            var result = userManager.Create(user, password);
            result = userManager.SetLockoutEnabled(user.Id, false);
        }

        // Add user admin to Role Admin if not already added
        var rolesForUser = userManager.GetRoles(user.Id);
        if (!rolesForUser.Contains(role.Name)) {
            var result = userManager.AddToRole(user.Id, role.Name);
        }
    }

【问题讨论】:

  • 你是什么意思得到相同的角色?您可以检查数据库内容并查看每个用户具有哪些角色。
  • 当我查看数据库时,用户“Sname”被添加到角色“Admin”,而不是角色“SAdmin”。
  • 您能检查一下您的角色表并确保定义了 2 个角色吗?
  • 我在 AspNetRoles 中只有一个角色(“管理员”)。怎么了?
  • 在 var Srole = roleManager.FindByName(SroleName) 中忘记了“S”;谢谢!

标签: c# asp.net asp.net-mvc-5 asp.net-identity-2


【解决方案1】:

问题出在代码...下面的代码块负责

    if (Srole == null)
    {
    **Srole = new IdentityRole(roleName);**
    var roleresult = roleManager.Create(Srole);
    }

将突出显示的行更改为

    **Srole = new IdentityRole(SroleName);**

应该可以解决

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 2020-01-24
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 2014-07-22
    相关资源
    最近更新 更多