gpt4 book ai didi

c# - 检查用户是否在 asp.net mvc Identity 中扮演角色

转载 作者:可可西里 更新时间:2023-11-01 08:16:09 27 4
gpt4 key购买 nike

我在为我的数据库添加用户和角色时遇到问题。

User 和 Role 都已创建(抛出错误后我可以在数据库中看到它们)。

但是,当我尝试检查用户是否在角色中时,出现异常。

我的代码是:

    public class tbInitializer<T> : DropCreateDatabaseAlways<tbContext>
{
protected override void Seed(tbContext context)
{
ApplicationDbContext userscontext = new ApplicationDbContext();
var userStore = new UserStore<ApplicationUser>(userscontext);
var userManager = new UserManager<ApplicationUser>(userStore);

var roleStore = new RoleStore<IdentityRole>(userscontext);
var roleManager = new RoleManager<IdentityRole>(roleStore);


if(!userscontext.Users.Any(x=> x.UserName=="marktest"))
{
var user = new ApplicationUser { UserName = "marktest", Email = "marktest@gmail.com" };
userManager.Create(user, "Pa$$W0rD!");
}

if (!roleManager.RoleExists("Admin"))
{
roleManager.Create(new IdentityRole("Admin"));
}

if(!userManager.IsInRole("marktest","Admin"))
{
userManager.AddToRole("marktest","Admin");
}

然而,在线:

if(!userManager.IsInRole("marktest","Admin"))

抛出异常并显示错误:找不到 UserId。

异常抛出后查看时,User和Role都在数据库中:

Shows User Added to DB

Shows Role Added to DB

谁能看出我做错了什么?

感谢您的帮助,

标记

最佳答案

我找到了解决方案,以防其他人遇到这个问题。

“IsInRole”需要一个 User.Id - 而不是 UserName 字符串 - 所以我改为:

            if (!userManager.IsInRole(user.Id, "Admin"))
{
userManager.AddToRole(user.Id, "Admin");
}

因此工作代码变为:

    ApplicationDbContext userscontext = new ApplicationDbContext();
var userStore = new UserStore<ApplicationUser>(userscontext);
var userManager = new UserManager<ApplicationUser>(userStore);

var roleStore = new RoleStore<IdentityRole>(userscontext);
var roleManager = new RoleManager<IdentityRole>(roleStore);

// Create Role
if (!roleManager.RoleExists("Admin"))
{
roleManager.Create(new IdentityRole("Admin"));
}

if(!userscontext.Users.Any(x=> x.UserName=="marktest"))
{
// Create User
var user = new ApplicationUser { UserName = "marktest", Email = "marktest@gmail.com" };
userManager.Create(user, "Pa$$W0rD!");

// Add User To Role
if (!userManager.IsInRole(user.Id, "Admin"))
{
userManager.AddToRole(user.Id, "Admin");
}


}

希望对你有帮助

标记

关于c# - 检查用户是否在 asp.net mvc Identity 中扮演角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29095425/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com