Index: ChapterX.Infrastructure/Repositories/ChapterRepository.cs
===================================================================
--- ChapterX.Infrastructure/Repositories/ChapterRepository.cs	(revision d300631ac3354730c3b03cb7b160974af50e7894)
+++ ChapterX.Infrastructure/Repositories/ChapterRepository.cs	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
@@ -24,4 +24,11 @@
                 .ToListAsync(cancellationToken);
         }
+
+        public async Task<Chapter?> GetByIdWithStoryAsync(int id, CancellationToken cancellationToken = default)
+        {
+            return await _dbSet
+                .Include(c => c.Story)
+                .FirstOrDefaultAsync(c => c.Id == id, cancellationToken);
+        }
     }
 }
Index: ChapterX.Infrastructure/Services/JwtTokenService.cs
===================================================================
--- ChapterX.Infrastructure/Services/JwtTokenService.cs	(revision d300631ac3354730c3b03cb7b160974af50e7894)
+++ ChapterX.Infrastructure/Services/JwtTokenService.cs	(revision b373fea3e2c9d404606002f8e7ba265a82d68187)
@@ -23,4 +23,8 @@
             var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
 
+            var role = user.Admin != null ? "Admin"
+                : user.Writer != null ? "Writer"
+                : "RegularUser";
+
             var claims = new[]
             {
@@ -28,5 +32,6 @@
                 new Claim(JwtRegisteredClaimNames.Email, user.Email),
                 new Claim(JwtRegisteredClaimNames.UniqueName, user.Username),
-                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
+                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
+                new Claim(ClaimTypes.Role, role)
             };
 
