AdminPanel/Netina.AdminPanel.PWA/Services/CustomAuthenticationStatePr...

43 lines
1.5 KiB
C#

using System.Security.Claims;
using Microsoft.AspNetCore.Components.Authorization;
using Netina.AdminPanel.PWA.Utilities;
namespace Netina.AdminPanel.PWA.Services;
public class CustomAuthenticationStateProvider : AuthenticationStateProvider
{
private readonly IUserUtility _userUtility;
public CustomAuthenticationStateProvider(IUserUtility userUtility)
{
_userUtility = userUtility;
}
public override async Task<AuthenticationState> GetAuthenticationStateAsync()
{
var token = await _userUtility.GetBearerTokenAsync();
if (token.IsNullOrEmpty())
return new AuthenticationState(new());
var user = await _userUtility.GetUserAsync();
if (user == null)
return new AuthenticationState(new());
if (user.RoleName == "Customer")
return new AuthenticationState(new());
var permissions = await _userUtility.GetPermissionsAsync();
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, user.FirstName + " " + user.LastName),
new Claim(ClaimTypes.MobilePhone, user.PhoneNumber),
new Claim(ClaimTypes.Role,user.RoleName)
};
if (permissions != null)
permissions.ForEach(p => claims.Add(new Claim("Permission", p)));
var identity = new ClaimsIdentity(claims, "Bearer");
var claimUser = new ClaimsPrincipal(identity);
return new AuthenticationState(claimUser);
}
}