【问题标题】:.Net Core Identity Framework Get Users By Claim.Net Core Identity Framework 通过声明获取用户
【发布时间】:2020-01-03 11:16:18
【问题描述】:

在我们的 .NET Core Web API 中,我们配置了基于声明的授权,它运行良好。我们创建了角色声明并将角色分配给用户。我们不使用用户声明。

现在我需要让用户提出特定声明。在 UserManager 中有一个方法 GetUsersByClaimAsync(Claim),它似乎只考虑用户声明。不是角色声明。所以就我而言,它不可用。

所以我正在考虑通过声明获取角色,然后通过角色获取用户(效率不高,因为它必须进行多次数据库调用才能分别获取每个角色的用户)。但即便如此,也没有直接的方法可以通过 UserManager 或 RoleManager 中的声明来获取角色。

所以对我来说,除了自定义查询之外,似乎没有什么干净的方法可以实现这一点。

我不确定我在这里遗漏了什么。有没有人用更好的方法做到了这一点?

谢谢

【问题讨论】:

  • 您需要一些身份实体之间的导航属性。对于基于角色的授权,我认为您应该忘记 asp.net 身份并实现自定义实体。
  • 我遇到了同样的情况,尝试使用自定义 Identity Server 4 存储库来解决这个问题。

标签: c# asp.net-core asp.net-identity claims-based-identity claims-authentication


【解决方案1】:

现在我需要让用户提出特定声明。在 UserManager 中有一个方法 GetUsersByClaimAsync(Claim),它似乎只考虑用户声明。不是角色声明。所以在我的情况下,它是不可用的。

我想你可以试试UserManager<TUser>.GetUsersInRoleAsync(roleName) api:

var users = await _userManager.GetUsersInRoleAsync("Role1");

顺便说一下,要使用上面的api,你需要通过以下方式启用Role相关服务:

AddDefaultIdentity(options => { /*...*/ }) .AddRoles() .AddEntityFrameworkStores();

【讨论】:

  • 感谢您的回答。是的,这是后备选项。要使用它,首先,需要获取具有特定声明的所有角色(可能很少)并多次调用 GetUsersInRole。甚至没有任何方法可以让角色拥有声明。所以需要手动添加一些导航props来做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2012-08-09
  • 2017-03-20
  • 2018-04-29
  • 1970-01-01
  • 2016-12-09
  • 2021-02-26
相关资源
最近更新 更多