Select ClaimsIdentity 直接通过 Entity Framework 和 LINQ
Select ClaimsIdentity directly via Entity Framework and LINQ
我有一个用户 table 具有以下列:
- ID : Guid
- 名称:字符串
- IsAdmin: 布尔值
现在我想使用 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();
}
我有一个用户 table 具有以下列:
- ID : Guid
- 名称:字符串
- IsAdmin: 布尔值
现在我想使用 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();
}