Index: ChapterX.Application/Comment/Commands/AddRequest.cs
===================================================================
--- ChapterX.Application/Comment/Commands/AddRequest.cs	(revision 877c13c3dd0934c1d31da7988d0d2c2c5925ed55)
+++ ChapterX.Application/Comment/Commands/AddRequest.cs	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -1,6 +1,11 @@
 using MediatR;
+using System.ComponentModel.DataAnnotations;
 
 namespace ChapterX.Application.Comment.Commands
 {
-    public record AddRequest(string Content, int UserId, int StoryId) : IRequest<AddResponse>;
+    public record AddRequest(
+        [Required][MaxLength(2000)] string Content,
+        int UserId,
+        int StoryId
+    ) : IRequest<AddResponse>;
 }
Index: ChapterX.Application/Comment/Commands/DeleteHandler.cs
===================================================================
--- ChapterX.Application/Comment/Commands/DeleteHandler.cs	(revision 877c13c3dd0934c1d31da7988d0d2c2c5925ed55)
+++ ChapterX.Application/Comment/Commands/DeleteHandler.cs	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -22,4 +22,7 @@
                 return new DeleteResponse(false);
 
+            if (comment.UserId != request.CallerId)
+                throw new UnauthorizedAccessException("You do not own this comment.");
+
             await _commentRepository.DeleteAsync(comment, cancellationToken);
 
Index: ChapterX.Application/Comment/Commands/DeleteRequest.cs
===================================================================
--- ChapterX.Application/Comment/Commands/DeleteRequest.cs	(revision 877c13c3dd0934c1d31da7988d0d2c2c5925ed55)
+++ ChapterX.Application/Comment/Commands/DeleteRequest.cs	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -3,4 +3,4 @@
 namespace ChapterX.Application.Comment.Commands
 {
-    public record DeleteRequest(int Id) : IRequest<DeleteResponse>;
+    public record DeleteRequest(int Id, int CallerId) : IRequest<DeleteResponse>;
 }
Index: ChapterX.Application/Comment/Commands/UpdateHandler.cs
===================================================================
--- ChapterX.Application/Comment/Commands/UpdateHandler.cs	(revision 877c13c3dd0934c1d31da7988d0d2c2c5925ed55)
+++ ChapterX.Application/Comment/Commands/UpdateHandler.cs	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -22,4 +22,7 @@
                 return new UpdateResponse(false);
 
+            if (comment.UserId != request.CallerId)
+                throw new UnauthorizedAccessException("You do not own this comment.");
+
             comment.Content = request.Content;
             comment.UpdatedAt = DateTime.UtcNow;
Index: ChapterX.Application/Comment/Commands/UpdateRequest.cs
===================================================================
--- ChapterX.Application/Comment/Commands/UpdateRequest.cs	(revision 877c13c3dd0934c1d31da7988d0d2c2c5925ed55)
+++ ChapterX.Application/Comment/Commands/UpdateRequest.cs	(revision 0b502c2664f4d6c64626f3394b4f1dc540e0aa9b)
@@ -3,4 +3,4 @@
 namespace ChapterX.Application.Comment.Commands
 {
-    public record UpdateRequest(int Id, string Content) : IRequest<UpdateResponse>;
+    public record UpdateRequest(int Id, string Content, int CallerId = 0) : IRequest<UpdateResponse>;
 }
