Files
StopShopping/StopShopping.Services/Implementions/ClaimsService.cs
2026-03-30 11:07:30 +08:00

54 lines
1.6 KiB
C#

using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using Microsoft.AspNetCore.Http;
using StopShopping.EF.Models;
using StopShopping.Services.Models;
namespace StopShopping.Services.Implementions;
public class ClaimsService : IClaimsService
{
public ClaimsService(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
private readonly IHttpContextAccessor _httpContextAccessor;
public ClaimsIdentity BuildIdentity(User user)
{
var claimsIdentity = new ClaimsIdentity(
[
new Claim(JwtRegisteredClaimNames.Sub, user.Id.ToString()),
new Claim(JwtRegisteredClaimNames.Name, user.Account),
new Claim(JwtRegisteredClaimNames.Nickname, user.NickName),
new Claim(ClaimTypes.Role, SystemRoles.User.ToString()),
]);
return claimsIdentity;
}
public ClaimsIdentity BuildAdminIdentity(Administrator admin)
{
var claimsIdentity = new ClaimsIdentity(
[
new Claim(JwtRegisteredClaimNames.Sub, admin.Id.ToString()),
new Claim(JwtRegisteredClaimNames.Name, admin.Account),
new Claim(JwtRegisteredClaimNames.Nickname, admin.NickName),
new Claim(ClaimTypes.Role, SystemRoles.Admin.ToString()),
]);
return claimsIdentity;
}
public int? GetCurrentUserId()
{
var currUserId = _httpContextAccessor.HttpContext
?.User.FindFirstValue(JwtRegisteredClaimNames.Sub);
if (string.IsNullOrWhiteSpace(currUserId))
return null;
return Convert.ToInt32(currUserId);
}
}