Asp.net核心身份:在cshtml

时间:2019-07-12 23:53:20

标签: c# asp.net-core

我有一个asp.net core 2.1身份项目,该项目设置有种子角色“ admin”和种子用户“ admin”。根据我的数据库,用户admin具有角色admin,但是当我这样做时:

@User.IsInRole("admin")

无论我是否登录,我都会得到假 我尝试寻找答案,并且找到了以下内容

@Roles.IsUserInRole(User.UserName, "admin")

@User.HasClaim("role", "admin")

对于第一个,似乎没有定义“ Roles”,而第二个则无效。 我究竟做错了什么?我忘记了什么吗?

2 个答案:

答案 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>();

请参阅https://github.com/aspnet/Identity/issues/1813

答案 1 :(得分:0)

我做了一些更多的研究,似乎更建议创建策略并使用这些策略代替角色。所以我需要修改一下代码。