我有一个asp.net core 2.1身份项目,该项目设置有种子角色“ admin”和种子用户“ admin”。根据我的数据库,用户admin具有角色admin,但是当我这样做时:
@User.IsInRole("admin")
无论我是否登录,我都会得到假 我尝试寻找答案,并且找到了以下内容
@Roles.IsUserInRole(User.UserName, "admin")
和
@User.HasClaim("role", "admin")
对于第一个,似乎没有定义“ Roles”,而第二个则无效。 我究竟做错了什么?我忘记了什么吗?
答案 0 :(得分:1)
这是2.1版本中的一个已知问题,并已在2.2 Preview-1中修复。
在asp.net核心2.1中,使用AddDefaultIdentity
并且注入变为
services.AddDefaultIdentity<IdentityUser>()
.AddRoles<IdentityRole>()
,默认情况下不会启用角色,并且对User.IsInRole始终返回false。
要绕过它,而不是使用新的AddDefaultIdentity<TUser>()
来配置Identity,只需使用旧式api即可:
services.AddIdentity<IdentityUser, IdentityRole>()
.AddRoleManager<RoleManager<IdentityRole>>()
.AddDefaultUI()
.AddDefaultTokenProviders()
.AddEntityFrameworkStores<ApplicationDbContext>();
答案 1 :(得分:0)
我做了一些更多的研究,似乎更建议创建策略并使用这些策略代替角色。所以我需要修改一下代码。