7

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

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

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

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

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

谢谢

4

1 回答 1

2

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

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

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

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

AddDefaultIdentity<IdentityUser>(options => { /*...*/ })
     .AddRoles<IdentityRole>()
    .AddEntityFrameworkStores<AppIdentityDbContext>();
于 2020-01-06T03:11:05.170 回答