如何获得角色声明?

Sib*_*Guy 7 asp.net-identity entity-framework-core asp.net-core

我创建了一个用户,并为他附加了一个具有多项声明的角色。问题是我没有看到使用 Entity Framework Core 和 Identity 集成访问检索它们的直接方法。这是我理想中想做的事情:

return _context.Users
  .Include(u => u.Roles)
  .ThenInclude(r => r.Role)
  .ThenInclude(r => r.Claims)
Run Code Online (Sandbox Code Playgroud)

但是没有 Role 属性,只有 RoleId。所以我不能包含角色声明。当然,我会进行单独的查询以获取声明甚至使用 RoleManager:

var user = _context.Users.Single(x => x.Id == ...);
var role = _roleManager.Roles.Single(x => x.Id ==  user.Roles.ElementAt(0).RoleId);
var claims = _roleManager.GetClaimsAsync(role).Result;
Run Code Online (Sandbox Code Playgroud)

但它看起来效率低下,甚至丑陋。应该有一种方法可以进行单个查询。

我最后的希望是 Controller.User 属性(ClaimsIdentity)。我希望它能以某种方式巧妙地汇总所有角色的声明。但是好像没有...

tmg*_*tmg 2

您可以使用类似 SQL 的查询表达式并获取用户所有角色的所有声明,如下所示:

var claims = from ur in _context.UserRoles
             where ur.UserId == "user_id"
             join r in _context.Roles on ur.RoleId equals r.Id
             join rc in _context.RoleClaims on r.Id equals rc.RoleId
             select rc;
Run Code Online (Sandbox Code Playgroud)