我創建了一個用戶,並在他身上附加了一個有很多聲明的角色。問題是我沒有看到使用Entity Framework Core和Identity集成訪問它們的直接方法。這是我理想的做法:

return _context.Users
  .Include(u => u.Roles)
  .ThenInclude(r => r.Role)
  .ThenInclude(r => r.Claims)

但是沒有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;

但它看起來效率低下甚至醜陋。應該有一種方法來進行單個查詢。

我最後的希望是Controller.User屬性(ClaimsIdentity)。我希望以某種方式巧妙地匯總所有角色的聲明。但似乎不是......

熱門答案

您可以使用類似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;


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow