C# Asp.net核心标识:检查用户是否为cshtml中的管理员
我有一个asp.NETCore2.1Identity项目,设置了种子角色“admin”,种子用户“admin”。根据我的数据库,用户admin具有admin角色,但当我这样做时:C# Asp.net核心标识:检查用户是否为cshtml中的管理员,c#,asp.net-core,C#,Asp.net Core,我有一个asp.NETCore2.1Identity项目,设置了种子角色“admin”,种子用户“admin”。根据我的数据库,用户admin具有admin角色,但当我这样做时: @User.IsInRole("admin") 无论我是否登录,我都会得到false 我试图寻找一个答案,我发现了以下几点 @Roles.IsUserInRole(User.UserName, "admin") 及 对于第一个,似乎没有定义“角色”,而第二个不起作用。 我做错了什么?我忘了什么吗 我做了更多的研究,
@User.IsInRole("admin")
无论我是否登录,我都会得到false
我试图寻找一个答案,我发现了以下几点
@Roles.IsUserInRole(User.UserName, "admin")
及
对于第一个,似乎没有定义“角色”,而第二个不起作用。
我做错了什么?我忘了什么吗 我做了更多的研究,似乎更明智的做法是制定政策并使用这些政策而不是角色。所以我需要修改一下我的代码 这是2.1版本中的一个已知问题,在2.2 preview-1中已修复 在asp.net core 2.1中,使用了
AddDefaultIdentity
,注入变为
services.AddDefaultIdentity<IdentityUser>()
.AddRoles<IdentityRole>()
services.AddDefaultIdentity()
.AddRoles()
,默认情况下不会启用角色,并且对于User.IsInRole,它始终返回false
要了解它,只需使用旧式api,而不是使用新的AddDefaultIdentity()
来配置标识:
services.AddIdentity<IdentityUser, IdentityRole>()
.AddRoleManager<RoleManager<IdentityRole>>()
.AddDefaultUI()
.AddDefaultTokenProviders()
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddIdentity()
.AddRoleManager()
.AddDefaultUI()
.AddDefaultTokenProviders()
.AddEntityFrameworkStores要使用@User.IsInRole(“admin”)
您需要在角色
表中设置一个角色“admin”
,并且当前用户需要映射到用户角色
表中的该角色,就像我说的,我检查了数据库,该角色存在,用户被添加到它为什么不使用身份验证方法?我想我也检查过了,但我记不起来了,明天我要检查一下。我转到了保险单和索赔单,但非常感谢+1
services.AddIdentity<IdentityUser, IdentityRole>()
.AddRoleManager<RoleManager<IdentityRole>>()
.AddDefaultUI()
.AddDefaultTokenProviders()
.AddEntityFrameworkStores<ApplicationDbContext>();