From b1b831f136b59158c66331c5fc2c289a1391a4a9 Mon Sep 17 00:00:00 2001 From: "Amir.H Khademi" Date: Wed, 31 Jan 2024 15:03:18 +0330 Subject: [PATCH] set version 0.2.1.10 complete blog and authorize --- .version | 2 +- .../Controller/BlogCategoryController.cs | 3 +- NetinaShop.Api/NetinaShop.Api.csproj | 6 +-- NetinaShop.Common/Models/Api/AccessToken.cs | 1 + .../BaseServices/Abstracts/IJwtService.cs | 5 +- NetinaShop.Core/BaseServices/JwtService.cs | 53 ++++++------------- .../CoreServices/AccountService.cs | 6 +-- NetinaShop.Domain/Dtos/LargDtos/BlogLDto.cs | 2 +- .../Dtos/SmallDtos/ApplicationUserSDto.cs | 3 ++ .../Mappers/ApplicationUserMapper.g.cs | 5 ++ NetinaShop.Domain/Mappers/BlogMapper.g.cs | 9 ++-- NetinaShop.Domain/Mappers/BrandMapper.g.cs | 9 ++-- .../Mappers/ProductCategoryMapper.g.cs | 9 ++-- NetinaShop.Domain/Mappers/ProductMapper.g.cs | 9 ++-- .../Mappers/StorageFileMapper.g.cs | 4 +- 15 files changed, 62 insertions(+), 64 deletions(-) diff --git a/.version b/.version index b5f89bb..d370b3e 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -0.0.0.9 \ No newline at end of file +0.2.1.10 \ No newline at end of file diff --git a/NetinaShop.Api/Controller/BlogCategoryController.cs b/NetinaShop.Api/Controller/BlogCategoryController.cs index bf3cd7e..f4a117c 100644 --- a/NetinaShop.Api/Controller/BlogCategoryController.cs +++ b/NetinaShop.Api/Controller/BlogCategoryController.cs @@ -32,8 +32,7 @@ public class BlogCategoryController : ICarterModule } // GET:Get All Entity - public async Task GetAllAsync([FromQuery] int? page, IRepositoryWrapper repositoryWrapper, - CancellationToken cancellationToken) + public async Task GetAllAsync([FromQuery] int? page, IRepositoryWrapper repositoryWrapper, CancellationToken cancellationToken) { if (page != null) { diff --git a/NetinaShop.Api/NetinaShop.Api.csproj b/NetinaShop.Api/NetinaShop.Api.csproj index 8d85fdf..1f2b1cc 100644 --- a/NetinaShop.Api/NetinaShop.Api.csproj +++ b/NetinaShop.Api/NetinaShop.Api.csproj @@ -1,4 +1,4 @@ - + net8.0 @@ -6,8 +6,8 @@ enable true Linux - 0.0.0.9 - 0.0.0.9 + 0.2.1.10 + 0.2.1.10 diff --git a/NetinaShop.Common/Models/Api/AccessToken.cs b/NetinaShop.Common/Models/Api/AccessToken.cs index a6e7ee7..2d91cef 100644 --- a/NetinaShop.Common/Models/Api/AccessToken.cs +++ b/NetinaShop.Common/Models/Api/AccessToken.cs @@ -45,6 +45,7 @@ public TUser User { get; set; } public string BearerToken => $"Bearer {access_token}"; public List Permissions { get; set; } + public string RoleName { get; set; } } diff --git a/NetinaShop.Core/BaseServices/Abstracts/IJwtService.cs b/NetinaShop.Core/BaseServices/Abstracts/IJwtService.cs index 5a7499b..b907c40 100644 --- a/NetinaShop.Core/BaseServices/Abstracts/IJwtService.cs +++ b/NetinaShop.Core/BaseServices/Abstracts/IJwtService.cs @@ -2,11 +2,8 @@ public interface IJwtService : IScopedDependency { - Task> Generate(TUser user, Guid complexId, Guid roleId) where TUser : ApplicationUser; - Task> Generate(TUser user, Guid complexId) where TUser : ApplicationUser; Task> Generate(TUser user) where TUser : ApplicationUser; - Task> Generate(TUser user, Guid complexId, Guid roleId) where TUser : ApplicationUser; - Task> Generate(TUser user, Guid complexId) where TUser : ApplicationUser; + Task> Generate(TUser user, List roleNames) where TUser : ApplicationUser; Task> Generate(TUser user) where TUser : ApplicationUser; } \ No newline at end of file diff --git a/NetinaShop.Core/BaseServices/JwtService.cs b/NetinaShop.Core/BaseServices/JwtService.cs index a77f311..adde80b 100644 --- a/NetinaShop.Core/BaseServices/JwtService.cs +++ b/NetinaShop.Core/BaseServices/JwtService.cs @@ -16,24 +16,6 @@ public class JwtService : IJwtService _roleManager = roleManager; _siteSettings = siteSettings.Value; } - public async Task> Generate(TUser user, Guid complexId, Guid roleId) where TUser : ApplicationUser - { - var tokenId = StringExtensions.GetId(8); - var claims = await GetClaims(user, tokenId, roleId.ToString()); - claims.Add(new Claim("ComplexId", complexId.ToString())); - - var token = BaseGenerate(user, claims); - token.Permissions = claims.Where(c => c.Type == "Permission").Select(c => c.Value).ToList(); - return token; - } - public async Task> Generate(TUser user, Guid complexId) where TUser : ApplicationUser - { - var tokenId = StringExtensions.GetId(8); - var claims = await GetClaims(user, tokenId); - claims.Add(new Claim("ComplexId", complexId.ToString())); - - return BaseGenerate(user, claims); - } public async Task> Generate(TUser user) where TUser : ApplicationUser { var tokenId = StringExtensions.GetId(8); @@ -42,26 +24,17 @@ public class JwtService : IJwtService } - public async Task> Generate(TUser user, Guid complexId, Guid roleId) where TUser : ApplicationUser + public async Task> Generate(TUser user, List roleNames) where TUser : ApplicationUser { var tokenId = StringExtensions.GetId(8); - var claims = await GetClaims(user, tokenId, roleId.ToString()); - claims.Add(new Claim("ComplexId", complexId.ToString())); + var claims = await GetClaims(user, tokenId, roleNames.ToArray()); var token = BaseGenerate(user, claims); token.Permissions = claims.Where(c => c.Type == "Permission").Select(c => c.Value).ToList(); + token.RoleName = claims.FirstOrDefault(c => c.Type == ClaimTypes.Role)?.Value; + return token; } - - - public async Task> Generate(TUser user, Guid complexId) where TUser : ApplicationUser - { - var tokenId = StringExtensions.GetId(8); - var claims = await GetClaims(user, tokenId); - claims.Add(new Claim("ComplexId", complexId.ToString())); - - return BaseGenerate(user, claims); - } public async Task> Generate(TUser user) where TUser : ApplicationUser { var tokenId = StringExtensions.GetId(8); @@ -129,19 +102,25 @@ public class JwtService : IJwtService } - private async Task> GetClaims(TUser baseUser, string jwtId, string roleId) where TUser : ApplicationUser + private async Task> GetClaims(TUser baseUser, string jwtId, params string[] roleNames) where TUser : ApplicationUser { - var applicationRole = await _roleManager.FindByIdAsync(roleId); - var roleClaims = await _roleManager.GetClaimsAsync(applicationRole); var claims = new List(); + + foreach (var roleName in roleNames) + { + var applicationRole = await _roleManager.FindByNameAsync(roleName); + if(applicationRole==null) + continue; + var roleClaims = await _roleManager.GetClaimsAsync(applicationRole); + claims.AddRange(roleClaims); + claims.Add(new Claim(ClaimTypes.Role, applicationRole.EnglishName)); + claims.Add(new Claim("RoleId", applicationRole.Id.ToString())); + } claims.Add(new Claim("SignUpStatus", ((int)baseUser.SignUpStatus).ToString())); claims.Add(new Claim(ClaimTypes.Name, baseUser.UserName)); claims.Add(new Claim(ClaimTypes.NameIdentifier, baseUser.Id.ToString())); - claims.Add(new Claim(ClaimTypes.Role, applicationRole.EnglishName)); - claims.Add(new Claim("RoleId", applicationRole.Id.ToString())); if (baseUser.Email != null) claims.Add(new Claim(ClaimTypes.Email, baseUser.Email)); - claims.AddRange(roleClaims); claims.Add(new Claim("JwtID", jwtId)); claims.Add(new Claim(ClaimTypes.Gender, baseUser.Gender == 0 ? "Female" : "Mail")); return claims; diff --git a/NetinaShop.Core/CoreServices/AccountService.cs b/NetinaShop.Core/CoreServices/AccountService.cs index f5d1346..2a8b9c4 100644 --- a/NetinaShop.Core/CoreServices/AccountService.cs +++ b/NetinaShop.Core/CoreServices/AccountService.cs @@ -145,9 +145,9 @@ public class AccountService : IAccountService private async Task> CompleteLogin(ApplicationUser user, CancellationToken cancellationToken) { AccessToken jwt; - jwt = await _jwtService.Generate(user); - - + var role = await _userManager.GetRolesAsync(user); + jwt = await _jwtService.Generate(user, role.ToList()); + jwt.User.RoleName = jwt.RoleName; return jwt; } diff --git a/NetinaShop.Domain/Dtos/LargDtos/BlogLDto.cs b/NetinaShop.Domain/Dtos/LargDtos/BlogLDto.cs index e6bf2db..581d813 100644 --- a/NetinaShop.Domain/Dtos/LargDtos/BlogLDto.cs +++ b/NetinaShop.Domain/Dtos/LargDtos/BlogLDto.cs @@ -10,5 +10,5 @@ public class BlogLDto : BaseDto public bool IsSuggested { get; set; } public Guid CategoryId { get; set; } public string CategoryName { get; set; } = string.Empty; - public List Files { get; internal set; } = new(); + public List Files { get; set; } = new(); } \ No newline at end of file diff --git a/NetinaShop.Domain/Dtos/SmallDtos/ApplicationUserSDto.cs b/NetinaShop.Domain/Dtos/SmallDtos/ApplicationUserSDto.cs index 6fbf0c8..d0c284e 100644 --- a/NetinaShop.Domain/Dtos/SmallDtos/ApplicationUserSDto.cs +++ b/NetinaShop.Domain/Dtos/SmallDtos/ApplicationUserSDto.cs @@ -10,6 +10,9 @@ public class ApplicationUserSDto : BaseDto public Gender Gender { get; set; } public SignUpStatus SignUpStatus { get; set; } public string NationalId { get; set; } = string.Empty; + public string Email { get; set; } = string.Empty; + public string FullName => FirstName + " " + LastName; + public string RoleName { get; set; } = string.Empty; public List RoleIds { get; set; } = new(); public long BirthDateTimeStamp => DateTimeExtensions.DateTimeToUnixTimeStamp(BirthDate); diff --git a/NetinaShop.Domain/Mappers/ApplicationUserMapper.g.cs b/NetinaShop.Domain/Mappers/ApplicationUserMapper.g.cs index 48e1b84..fc1d853 100644 --- a/NetinaShop.Domain/Mappers/ApplicationUserMapper.g.cs +++ b/NetinaShop.Domain/Mappers/ApplicationUserMapper.g.cs @@ -18,6 +18,7 @@ namespace NetinaShop.Domain.Mappers Gender = p1.Gender, SignUpStatus = p1.SignUpStatus, Id = p1.Id, + Email = p1.Email, PhoneNumber = p1.PhoneNumber }; } @@ -36,6 +37,7 @@ namespace NetinaShop.Domain.Mappers result.Gender = p2.Gender; result.SignUpStatus = p2.SignUpStatus; result.Id = p2.Id; + result.Email = p2.Email; result.PhoneNumber = p2.PhoneNumber; return result; @@ -51,6 +53,7 @@ namespace NetinaShop.Domain.Mappers Gender = p4.Gender, SignUpStatus = p4.SignUpStatus, NationalId = p4.NationalId, + Email = p4.Email, Id = p4.Id }; } @@ -69,6 +72,7 @@ namespace NetinaShop.Domain.Mappers result.Gender = p5.Gender; result.SignUpStatus = p5.SignUpStatus; result.NationalId = p5.NationalId; + result.Email = p5.Email; result.Id = p5.Id; return result; @@ -82,6 +86,7 @@ namespace NetinaShop.Domain.Mappers Gender = p7.Gender, SignUpStatus = p7.SignUpStatus, NationalId = p7.NationalId, + Email = p7.Email, Id = p7.Id }; } diff --git a/NetinaShop.Domain/Mappers/BlogMapper.g.cs b/NetinaShop.Domain/Mappers/BlogMapper.g.cs index 5844d48..45a957b 100644 --- a/NetinaShop.Domain/Mappers/BlogMapper.g.cs +++ b/NetinaShop.Domain/Mappers/BlogMapper.g.cs @@ -63,7 +63,8 @@ namespace NetinaShop.Domain.Mappers IsHeader = p8.IsHeader, IsPrimary = p8.IsPrimary, FileType = p8.FileType, - Id = p8.Id + Id = p8.Id, + CreatedAt = p8.CreatedAt }).ToList(), Id = p7.Id }; @@ -238,7 +239,8 @@ namespace NetinaShop.Domain.Mappers IsHeader = item.IsHeader, IsPrimary = item.IsPrimary, FileType = item.FileType, - Id = item.Id + Id = item.Id, + CreatedAt = item.CreatedAt }); i++; } @@ -268,7 +270,8 @@ namespace NetinaShop.Domain.Mappers IsHeader = item.IsHeader, IsPrimary = item.IsPrimary, FileType = item.FileType, - Id = item.Id + Id = item.Id, + CreatedAt = item.CreatedAt }); i++; } diff --git a/NetinaShop.Domain/Mappers/BrandMapper.g.cs b/NetinaShop.Domain/Mappers/BrandMapper.g.cs index b03a114..0c3fa87 100644 --- a/NetinaShop.Domain/Mappers/BrandMapper.g.cs +++ b/NetinaShop.Domain/Mappers/BrandMapper.g.cs @@ -53,7 +53,8 @@ namespace NetinaShop.Domain.Mappers IsHeader = p8.IsHeader, IsPrimary = p8.IsPrimary, FileType = p8.FileType, - Id = p8.Id + Id = p8.Id, + CreatedAt = p8.CreatedAt }).ToList(), Id = p7.Id }; @@ -192,7 +193,8 @@ namespace NetinaShop.Domain.Mappers IsHeader = item.IsHeader, IsPrimary = item.IsPrimary, FileType = item.FileType, - Id = item.Id + Id = item.Id, + CreatedAt = item.CreatedAt }); i++; } @@ -222,7 +224,8 @@ namespace NetinaShop.Domain.Mappers IsHeader = item.IsHeader, IsPrimary = item.IsPrimary, FileType = item.FileType, - Id = item.Id + Id = item.Id, + CreatedAt = item.CreatedAt }); i++; } diff --git a/NetinaShop.Domain/Mappers/ProductCategoryMapper.g.cs b/NetinaShop.Domain/Mappers/ProductCategoryMapper.g.cs index a4c98e0..4d686b3 100644 --- a/NetinaShop.Domain/Mappers/ProductCategoryMapper.g.cs +++ b/NetinaShop.Domain/Mappers/ProductCategoryMapper.g.cs @@ -50,7 +50,8 @@ namespace NetinaShop.Domain.Mappers IsHeader = p8.IsHeader, IsPrimary = p8.IsPrimary, FileType = p8.FileType, - Id = p8.Id + Id = p8.Id, + CreatedAt = p8.CreatedAt }).ToList(), Id = p7.Id }; @@ -186,7 +187,8 @@ namespace NetinaShop.Domain.Mappers IsHeader = item.IsHeader, IsPrimary = item.IsPrimary, FileType = item.FileType, - Id = item.Id + Id = item.Id, + CreatedAt = item.CreatedAt }); i++; } @@ -216,7 +218,8 @@ namespace NetinaShop.Domain.Mappers IsHeader = item.IsHeader, IsPrimary = item.IsPrimary, FileType = item.FileType, - Id = item.Id + Id = item.Id, + CreatedAt = item.CreatedAt }); i++; } diff --git a/NetinaShop.Domain/Mappers/ProductMapper.g.cs b/NetinaShop.Domain/Mappers/ProductMapper.g.cs index c05fd07..7b8cb31 100644 --- a/NetinaShop.Domain/Mappers/ProductMapper.g.cs +++ b/NetinaShop.Domain/Mappers/ProductMapper.g.cs @@ -104,7 +104,8 @@ namespace NetinaShop.Domain.Mappers IsHeader = p16.IsHeader, IsPrimary = p16.IsPrimary, FileType = p16.FileType, - Id = p16.Id + Id = p16.Id, + CreatedAt = p16.CreatedAt }).ToList(), Id = p13.Id }; @@ -415,7 +416,8 @@ namespace NetinaShop.Domain.Mappers IsHeader = item.IsHeader, IsPrimary = item.IsPrimary, FileType = item.FileType, - Id = item.Id + Id = item.Id, + CreatedAt = item.CreatedAt }); i++; } @@ -505,7 +507,8 @@ namespace NetinaShop.Domain.Mappers IsHeader = item.IsHeader, IsPrimary = item.IsPrimary, FileType = item.FileType, - Id = item.Id + Id = item.Id, + CreatedAt = item.CreatedAt }); i++; } diff --git a/NetinaShop.Domain/Mappers/StorageFileMapper.g.cs b/NetinaShop.Domain/Mappers/StorageFileMapper.g.cs index 7d09b46..4a81a3e 100644 --- a/NetinaShop.Domain/Mappers/StorageFileMapper.g.cs +++ b/NetinaShop.Domain/Mappers/StorageFileMapper.g.cs @@ -17,7 +17,8 @@ namespace NetinaShop.Domain.Mappers IsHeader = p1.IsHeader, IsPrimary = p1.IsPrimary, FileType = p1.FileType, - Id = p1.Id + Id = p1.Id, + CreatedAt = p1.CreatedAt }; } public static StorageFile AdaptTo(this StorageFileSDto p2, StorageFile p3) @@ -35,6 +36,7 @@ namespace NetinaShop.Domain.Mappers result.IsPrimary = p2.IsPrimary; result.FileType = p2.FileType; result.Id = p2.Id; + result.CreatedAt = p2.CreatedAt; return result; }