From eefa23b3b8ca41a5f158e8bec46fda786a085336 Mon Sep 17 00:00:00 2001 From: Tudor Stanciu Date: Wed, 12 Apr 2023 18:13:37 +0300 Subject: [PATCH] [2.4.3] - Added IDs for user roles and groups in authorization result --- Directory.Build.props | 2 +- ReleaseNotes.xml | 9 ++++++++ .../Extensions/EntityConversions.cs | 21 +++++++++++++++++++ .../Mappings/MappingProfile.cs | 1 + .../Services/TokenService.cs | 5 +++-- src/Tuitio.Domain/Models/GenericRecords.cs | 6 ++++++ src/Tuitio.Domain/Models/Token.cs | 6 +++--- .../Dto/ResultRecords.cs | 5 +++-- src/Tuitio.PublishedLanguage/ReleaseNotes.txt | 5 ++++- .../Tuitio.PublishedLanguage.csproj | 2 +- src/Tuitio.Wrapper/ReleaseNotes.txt | 5 ++++- src/Tuitio.Wrapper/Tuitio.Wrapper.csproj | 2 +- 12 files changed, 57 insertions(+), 12 deletions(-) create mode 100644 src/Tuitio.Domain/Models/GenericRecords.cs diff --git a/Directory.Build.props b/Directory.Build.props index 15d41d2..828ba73 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,7 +1,7 @@ - 2.4.2 + 2.4.3 Tudor Stanciu STA Tuitio diff --git a/ReleaseNotes.xml b/ReleaseNotes.xml index f37af3a..7cf9149 100644 --- a/ReleaseNotes.xml +++ b/ReleaseNotes.xml @@ -114,4 +114,13 @@ ◾ New versions of nuget packages have been released. + + 2.4.3 + 2023-04-12 20:37 + + Added IDs for user roles and groups in authorization result + ◾ Based on the development from the previous version, the authorization result has been extended and will contain both IDs and codes for the groups and roles of the authenticated user. + ◾ New versions of nuget packages have been released. + + \ No newline at end of file diff --git a/src/Tuitio.Application/Extensions/EntityConversions.cs b/src/Tuitio.Application/Extensions/EntityConversions.cs index 960ad9e..d85fe85 100644 --- a/src/Tuitio.Application/Extensions/EntityConversions.cs +++ b/src/Tuitio.Application/Extensions/EntityConversions.cs @@ -1,7 +1,10 @@ // Copyright (c) 2020 Tudor Stanciu +using System; using System.Collections.Generic; +using System.Linq; using Tuitio.Domain.Entities; +using Tuitio.Domain.Models; namespace Tuitio.Application.Extensions { @@ -18,5 +21,23 @@ namespace Tuitio.Application.Extensions return result; } + + public static IEnumerable AsRecordIdentifiers(this IEnumerable userGroups) + { + if (userGroups == null) + throw new ArgumentNullException(nameof(userGroups)); + + var result = userGroups.Select(z => new RecordIdentifier(z.UserGroupId, z.UserGroupCode)); + return result; + } + + public static IEnumerable AsRecordIdentifiers(this IEnumerable userRoles) + { + if (userRoles == null) + throw new ArgumentNullException(nameof(userRoles)); + + var result = userRoles.Select(z => new RecordIdentifier(z.UserRoleId, z.UserRoleCode)); + return result; + } } } diff --git a/src/Tuitio.Application/Mappings/MappingProfile.cs b/src/Tuitio.Application/Mappings/MappingProfile.cs index 33d7f89..a1bff2f 100644 --- a/src/Tuitio.Application/Mappings/MappingProfile.cs +++ b/src/Tuitio.Application/Mappings/MappingProfile.cs @@ -10,6 +10,7 @@ namespace Tuitio.Application.Mappings { public MappingProfile() { + CreateMap(); CreateMap(); CreateMap(); } diff --git a/src/Tuitio.Application/Services/TokenService.cs b/src/Tuitio.Application/Services/TokenService.cs index 2afb97d..3642ac7 100644 --- a/src/Tuitio.Application/Services/TokenService.cs +++ b/src/Tuitio.Application/Services/TokenService.cs @@ -22,8 +22,9 @@ namespace Tuitio.Application.Services { var token = new Token(_configProvider.Token.ValidityInMinutes); var claims = user.Claims?.ToDictionary(); - var userRoles = user.GetUserRoles().Select(z => z.UserRoleCode); - var userGroups = user.UserGroups?.Select(z => z.UserGroup.UserGroupCode); + var userRoles = user.GetUserRoles().AsRecordIdentifiers(); + var userGroups = user.UserGroups?.Select(z => z.UserGroup).AsRecordIdentifiers(); + token.SetUserData(user.UserId, user.UserName, user.FirstName, user.LastName, user.Email, user.SecurityStamp, claims, userRoles, userGroups); return token; } diff --git a/src/Tuitio.Domain/Models/GenericRecords.cs b/src/Tuitio.Domain/Models/GenericRecords.cs new file mode 100644 index 0000000..8cfff4f --- /dev/null +++ b/src/Tuitio.Domain/Models/GenericRecords.cs @@ -0,0 +1,6 @@ +// Copyright (c) 2020 Tudor Stanciu + +namespace Tuitio.Domain.Models +{ + public record RecordIdentifier(int Id, string Code); +} diff --git a/src/Tuitio.Domain/Models/Token.cs b/src/Tuitio.Domain/Models/Token.cs index 5c18317..5e11d0c 100644 --- a/src/Tuitio.Domain/Models/Token.cs +++ b/src/Tuitio.Domain/Models/Token.cs @@ -24,10 +24,10 @@ namespace Tuitio.Domain.Models public Dictionary Claims { get; set; } [JsonIgnore] - public IEnumerable UserRoles { get; set; } + public IEnumerable UserRoles { get; set; } [JsonIgnore] - public IEnumerable UserGroups { get; set; } + public IEnumerable UserGroups { get; set; } [Obsolete("This constructor is only used for deserialization and should not be used for any other purpose.")] public Token() { } @@ -40,7 +40,7 @@ namespace Tuitio.Domain.Models ExpiresIn = validityInMinutes * 60; // seconds } - public void SetUserData(int userId, string userName, string firstName, string lastName, string email, string securityStamp, Dictionary claims, IEnumerable userRoles, IEnumerable userGroups) + public void SetUserData(int userId, string userName, string firstName, string lastName, string email, string securityStamp, Dictionary claims, IEnumerable userRoles, IEnumerable userGroups) { UserId = userId; UserName = userName; diff --git a/src/Tuitio.PublishedLanguage/Dto/ResultRecords.cs b/src/Tuitio.PublishedLanguage/Dto/ResultRecords.cs index 9ebedcd..b01a396 100644 --- a/src/Tuitio.PublishedLanguage/Dto/ResultRecords.cs +++ b/src/Tuitio.PublishedLanguage/Dto/ResultRecords.cs @@ -20,7 +20,8 @@ namespace Tuitio.PublishedLanguage.Dto public DateTime CreatedAt { get; init; } public long ExpiresIn { get; init; } public Dictionary Claims { get; init; } - public string[] UserRoles { get; init; } - public string[] UserGroups { get; init; } + public RecordIdentifier[] UserRoles { get; init; } + public RecordIdentifier[] UserGroups { get; init; } } + public record RecordIdentifier(int Id, string Code); } diff --git a/src/Tuitio.PublishedLanguage/ReleaseNotes.txt b/src/Tuitio.PublishedLanguage/ReleaseNotes.txt index 6605ddb..f585f65 100644 --- a/src/Tuitio.PublishedLanguage/ReleaseNotes.txt +++ b/src/Tuitio.PublishedLanguage/ReleaseNotes.txt @@ -1,4 +1,7 @@ -2.2.1 release [2023-04-08 01:48] +2.2.2 release [2023-04-12 20:37] +◾ Added IDs for user roles and groups in authorization result + +2.2.1 release [2023-04-08 01:48] ◾ Added user roles and groups in authorization result 2.2.0 release [2023-03-27 19:20] diff --git a/src/Tuitio.PublishedLanguage/Tuitio.PublishedLanguage.csproj b/src/Tuitio.PublishedLanguage/Tuitio.PublishedLanguage.csproj index 8d5469a..009ca0f 100644 --- a/src/Tuitio.PublishedLanguage/Tuitio.PublishedLanguage.csproj +++ b/src/Tuitio.PublishedLanguage/Tuitio.PublishedLanguage.csproj @@ -7,7 +7,7 @@ https://lab.code-rove.com/gitea/tudor.stanciu/tuitio Git $([System.IO.File]::ReadAllText("$(MSBuildProjectDirectory)/ReleaseNotes.txt")) - 2.2.1 + 2.2.2 logo.png README.md Toodle HomeLab diff --git a/src/Tuitio.Wrapper/ReleaseNotes.txt b/src/Tuitio.Wrapper/ReleaseNotes.txt index 66b9a72..0ff9292 100644 --- a/src/Tuitio.Wrapper/ReleaseNotes.txt +++ b/src/Tuitio.Wrapper/ReleaseNotes.txt @@ -1,4 +1,7 @@ -2.2.1 release [2023-04-08 01:48] +2.2.2 release [2023-04-12 20:37] +◾ Added IDs for user roles and groups in authorization result + +2.2.1 release [2023-04-08 01:48] ◾ Added user roles and groups in authorization result 2.2.0 release [2023-03-27 19:20] diff --git a/src/Tuitio.Wrapper/Tuitio.Wrapper.csproj b/src/Tuitio.Wrapper/Tuitio.Wrapper.csproj index 9b0d78e..a5e559e 100644 --- a/src/Tuitio.Wrapper/Tuitio.Wrapper.csproj +++ b/src/Tuitio.Wrapper/Tuitio.Wrapper.csproj @@ -7,7 +7,7 @@ https://lab.code-rove.com/gitea/tudor.stanciu/tuitio Git $([System.IO.File]::ReadAllText("$(MSBuildProjectDirectory)/ReleaseNotes.txt")) - 2.2.1 + 2.2.2 logo.png README.md Toodle HomeLab