diff --git a/src/MaksIT.Core/MaksIT.Core.csproj b/src/MaksIT.Core/MaksIT.Core.csproj
index 7618d49..a862a93 100644
--- a/src/MaksIT.Core/MaksIT.Core.csproj
+++ b/src/MaksIT.Core/MaksIT.Core.csproj
@@ -8,7 +8,7 @@
MaksIT.Core
- 1.4.5
+ 1.4.6
Maksym Sadovnychyy
MAKS-IT
MaksIT.Core
diff --git a/src/MaksIT.Core/Security/JWT/CustomClaims.cs b/src/MaksIT.Core/Security/JWT/CustomClaims.cs
new file mode 100644
index 0000000..73b37d8
--- /dev/null
+++ b/src/MaksIT.Core/Security/JWT/CustomClaims.cs
@@ -0,0 +1,12 @@
+using MaksIT.Core.Abstractions;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace MaksIT.Core.Security.JWT;
+public class CustomClaims : Enumeration {
+ public static readonly CustomClaims AclEntry = new(1, "acl_entry");
+ private CustomClaims(int id, string name) : base(id, name) { }
+}
diff --git a/src/MaksIT.Core/Security/JWT/JWTTokenClaims.cs b/src/MaksIT.Core/Security/JWT/JWTTokenClaims.cs
index 46c0554..d50a89f 100644
--- a/src/MaksIT.Core/Security/JWT/JWTTokenClaims.cs
+++ b/src/MaksIT.Core/Security/JWT/JWTTokenClaims.cs
@@ -17,6 +17,8 @@ public class JWTTokenClaims {
///
public List? Roles { get; set; }
+ public List? AclEntries { get; set; }
+
///
/// Gets or sets the date and time when the token was issued.
///
diff --git a/src/MaksIT.Core/Security/JWT/JWTTokenGenerateRequest.cs b/src/MaksIT.Core/Security/JWT/JWTTokenGenerateRequest.cs
index dc41a09..09fa48b 100644
--- a/src/MaksIT.Core/Security/JWT/JWTTokenGenerateRequest.cs
+++ b/src/MaksIT.Core/Security/JWT/JWTTokenGenerateRequest.cs
@@ -37,4 +37,7 @@ public class JWTTokenGenerateRequest {
///
public List? Roles { get; set; }
+
+ public List? AclEntries { get; set; }
+
}
\ No newline at end of file
diff --git a/src/MaksIT.Core/Security/JWT/JwtGenerator.cs b/src/MaksIT.Core/Security/JWT/JwtGenerator.cs
index 380b8f4..13e1bab 100644
--- a/src/MaksIT.Core/Security/JWT/JwtGenerator.cs
+++ b/src/MaksIT.Core/Security/JWT/JwtGenerator.cs
@@ -8,8 +8,10 @@ using System.Text;
namespace MaksIT.Core.Security.JWT;
-public static class JwtGenerator {
+
+
+public static class JwtGenerator {
///
/// Attempts to generate a JWT token using the specified request parameters.
///
@@ -49,6 +51,9 @@ public static class JwtGenerator {
if (request.Roles !=null)
claims.AddRange(request.Roles.Select(role => new Claim(ClaimTypes.Role, role)));
+ if (request.AclEntries != null)
+ claims.AddRange(request.AclEntries.Select(acl => new Claim(CustomClaims.AclEntry.Name, acl)));
+
var tokenDescriptor = new JwtSecurityToken(
issuer: request.Issuer,
audience: request.Audience,
@@ -141,6 +146,7 @@ public static class JwtGenerator {
var username = principal.Identity?.Name;
var roles = principal.Claims.Where(c => c.Type == ClaimTypes.Role).Select(c => c.Value).ToList();
+ var aclEntries = principal.Claims.Where(c => c.Type == CustomClaims.AclEntry.Name).Select(c => c.Value).ToList();
var issuedAtClaim = principal.Claims.FirstOrDefault(c => c.Type == JwtRegisteredClaimNames.Iat)?.Value;
var expiresAtClaim = principal.Claims.FirstOrDefault(c => c.Type == JwtRegisteredClaimNames.Exp)?.Value;
@@ -152,6 +158,7 @@ public static class JwtGenerator {
UserId = userId,
Username = username,
Roles = roles,
+ AclEntries = aclEntries,
IssuedAt = issuedAt,
ExpiresAt = expiresAt
};