using HelloShop.ServiceDefaults.Constants; using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Options; using System.Security.Claims; namespace HelloShop.IdentityService; public class CustomUserClaimsPrincipalFactory(UserManager userManager, RoleManager roleManager, IOptions options) : UserClaimsPrincipalFactory(userManager, roleManager, options) where TUser : IdentityUser where TRole : IdentityRole { protected override async Task GenerateClaimsAsync(TUser user) { var claimsIdentity = await base.GenerateClaimsAsync(user).ConfigureAwait(false); if (UserManager.SupportsUserRole) { var roleNames = await UserManager.GetRolesAsync(user).ConfigureAwait(false); var roles = RoleManager.Roles.Where(r => r.Name != null && roleNames.Contains(r.Name)); foreach (var role in roles) { claimsIdentity.AddClaim(new Claim(CustomClaimTypes.RoleIdentifier, role.Id.ToString())); } } return claimsIdentity; } }