Select ClaimsIdentity 直接通过 Entity Framework 和 LINQ

Select ClaimsIdentity directly via Entity Framework and LINQ

我有一个用户 table 具有以下列:

现在我想使用 EF Core 创建 select,结果为 ClaimsIdentity

public ClaimsIdentity? GetIdentity(string email, string password)
{
   return _context.Users
       .Where(user => user.Email.ToLower().Equals(email.ToLower()))
       .Where(user => user.Password.Equals(password))
       .Select(user => new ClaimsIdentity(
           new Claim("id", user.Id.ToString()),
           new Claim(ClaimTypes.Role, UserRole.ADMIN.ToString())
       ))
       .SingleOrDefault();

但目前我不知道动态声明列表是否可能以及如何存档。如果用户是管理员 (IsAdmin = true),则声明“Admin”应该只出现在声明列表中。

或者我是否需要临时 class/DTO(例如 UserIdentity)到 select 数据?但是在那种情况下,我可以有一个动态的角色列表吗?

您可以针对您的用例执行类似的操作

public ClaimsIdentity? GetIdentity(string email, string password)
             {
            return _context.Users
                .Where(user => user.Email.ToLower().Equals(email.ToLower()))
                .Where(user => user.Password.Equals(password))
                .Select(user =>
                {
                    var identity = new ClaimsIdentity(
                    new Claim("id", user.Id.ToString())
                    );
                    if (UserRole.ADMIN == true)
                    {
                        identity.AddClaim(new Claim(ClaimTypes.Role, UserRole.ADMIN.ToString()))
                    }
                    return identity;
                })
                .SingleOrDefault();
            }