Index: src/main/java/com/db/finki/www/build_board/controller/thread_controller/TopicController.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/controller/thread_controller/TopicController.java	(revision 2ea5815e32326ba17dd3edd87f8382c4b7ec5696)
+++ src/main/java/com/db/finki/www/build_board/controller/thread_controller/TopicController.java	(revision a3e93dd697cb8499a03e68113508a7c583f12f13)
@@ -111,6 +111,8 @@
 
     @PostMapping("{id}/report")
-    public String reportUser(@PathVariable(name = "id") long topicId, @RequestParam String reason
-            , @SessionAttribute BBUser user,
+    @PreAuthorize("@topicServiceImpl.getById(#topicId).user.id.equals(#user.id)")
+    public String reportUser(@PathVariable(name = "id") @P("topicId") long topicId,
+            @RequestParam String reason
+            , @SessionAttribute @P("user") BBUser user,
             @RequestParam(name = "report-username") String reportingUser, Model model){
         reportService.createReport(topicId,reason,user, reportingUser);
@@ -129,9 +131,9 @@
 
     @GetMapping("{id}/reports")
-    //TODO: check if moderators
-    public String getReports(@PathVariable(name = "id") long topicId, Model model,
+    @PreAuthorize("@topicServiceImpl.getById(#topicId).user.id.equals(#user.id)")
+    public String getReports(@PathVariable(name = "id") @P("topicId") long topicId, Model model,
             @RequestParam(required = false) Status status,
-            @RequestParam(required = false, name = "checkSearchLatest") String isSearForLatestActive
-
+            @RequestParam(required = false, name = "checkSearchLatest") String isSearForLatestActive,
+            @SessionAttribute @P("user") BBUser user
                             ){
        Topic t = topicService.getById(topicId);
@@ -148,13 +150,12 @@
 
     @PostMapping("{id}/reports/{req-id}/accept")
+    @PreAuthorize("@topicServiceImpl.getById(#topicId).user.id.equals(#user.id)")
     public RedirectView acceptRequest(
             @PathVariable(name = "req-id") Integer reqId,
-            @PathVariable(name = "id") long topicId,
+            @PathVariable(name = "id") @P("topicId") long topicId,
             @RequestParam(name = "feedback-desc") String feedbackDesc,
             @SessionAttribute @P("user") BBUser user
                                      ) {
-        reportService.accept(reqId, feedbackDesc, (Moderator) user); //TODO: gore vo PreAuthorize
-        // ke imash check dali e voopshto vo moderators i da ne e moderator about user deka nemat
-        // smisla
+        reportService.accept(reqId, feedbackDesc, user);
         return new RedirectView(
                 String.format("/topics/%s/reports", topicId)
@@ -163,7 +164,8 @@
 
     @PostMapping("{id}/reports/{req-id}/deny")
+    @PreAuthorize("@topicServiceImpl.getById(#topicId).user.id.equals(#user.id)")
     public RedirectView denyRequest(
             @PathVariable(name = "req-id") Integer reqId,
-            @PathVariable(name = "id") long topicId,
+            @PathVariable(name = "id") @P("topicId") long topicId,
             @RequestParam(name = "feedback-desc") String feedbackDesc,
             @SessionAttribute @P("user") BBUser user
@@ -174,3 +176,9 @@
         );
     }
+
+    @GetMapping("{id}/blacklisted")
+    public String getBlacklistedUsers(@PathVariable(name = "id") long topicId, Model model){
+
+        return "show-blacklisted-users.html";
+    }
 }
Index: src/main/java/com/db/finki/www/build_board/entity/thread/Topic.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/thread/Topic.java	(revision 2ea5815e32326ba17dd3edd87f8382c4b7ec5696)
+++ src/main/java/com/db/finki/www/build_board/entity/thread/Topic.java	(revision a3e93dd697cb8499a03e68113508a7c583f12f13)
@@ -1,4 +1,5 @@
 package com.db.finki.www.build_board.entity.thread;
 
+import com.db.finki.www.build_board.entity.blacklisted_user.BlacklistedUser;
 import com.db.finki.www.build_board.entity.thread.itf.NamedThread;
 import com.db.finki.www.build_board.entity.thread.multi_valued_attribute.Guideline;
@@ -26,9 +27,10 @@
     private Project parent;
 
+    @OneToMany(mappedBy = "topic")
+    private List<BlacklistedUser> blacklistedUsers;
+
     @Override
     public String getTypeName() {
         return "topics";
     }
-
-    //TODO: add moderator
 }
Index: src/main/java/com/db/finki/www/build_board/service/thread/impl/TopicServiceImpl.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/service/thread/impl/TopicServiceImpl.java	(revision 2ea5815e32326ba17dd3edd87f8382c4b7ec5696)
+++ src/main/java/com/db/finki/www/build_board/service/thread/impl/TopicServiceImpl.java	(revision a3e93dd697cb8499a03e68113508a7c583f12f13)
@@ -1,4 +1,5 @@
 package com.db.finki.www.build_board.service.thread.impl;
 
+import com.db.finki.www.build_board.entity.blacklisted_user.BlacklistedUser;
 import com.db.finki.www.build_board.entity.thread.Project;
 import com.db.finki.www.build_board.entity.user_type.BBUser;
@@ -105,3 +106,7 @@
     }
 
+    public List<BlacklistedUser> getBlacklistedUsersForTopicById(long id) {
+
+    }
+
 }
Index: src/main/resources/templates/show-blacklisted-users.html
===================================================================
--- src/main/resources/templates/show-blacklisted-users.html	(revision a3e93dd697cb8499a03e68113508a7c583f12f13)
+++ src/main/resources/templates/show-blacklisted-users.html	(revision a3e93dd697cb8499a03e68113508a7c583f12f13)
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<head>
+    <meta charset="UTF-8">
+    <title>Reports</title>
+    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css"
+          rel="stylesheet">
+</head>
+<body>
+<div class="list-group-item d-flex gap-2 justify-content-between align-items-center ps-4 pe-4"
+     th:each="blacklistedUser : ${blacklistedUsers}">
+    <div class="d-flex flex-row align-items-center gap-3">
+        <img class="rounded-circle border border-1 border-info"
+             style="width: 5em; height: 5em"
+             th:src="${blacklistedUser.getAvatarUrl()}">
+        <h5 class="mb-1 d-flex">
+            <a th:href="@{/{username}/profile (username=${blacklistedUser.getUsername()})}"
+               th:text="${blacklistedUser.getUsername()}"
+               class="text-decoration-none"
+            ></a>
+        </h5>
+    </div>
+    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
+</div>
+</body>
Index: src/main/resources/templates/show-topic.html
===================================================================
--- src/main/resources/templates/show-topic.html	(revision 2ea5815e32326ba17dd3edd87f8382c4b7ec5696)
+++ src/main/resources/templates/show-topic.html	(revision a3e93dd697cb8499a03e68113508a7c583f12f13)
@@ -73,8 +73,15 @@
                     guidelines
                 </button>
-<!--                Moderator check -->
-                <a th:if="${session.user != null}" th:href="@{/topics/{id}/reports(id=${topic.getId()})}"
+                <!--                Moderator check -->
+                <a th:if="${session.user != null && session.user.id == topic.getUser().getId()}"
+                   th:href="@{/topics/{id}/reports(id=${topic.getId()})}"
                    class="btn btn-info btn-sm">
-                    Show reports
+                    Show
+                    reports
+                </a>
+                <a th:if="${session.user != null && session.user.id == topic.getUser().getId()}"
+                   th:href="@{/topics/{id}/blacklisted(id=${topic.getId()})}"
+                   class="btn btn-info btn-sm">
+                    Show blacklisted users
                 </a>
             </div>
@@ -191,29 +198,48 @@
     <div th:replace="~{/fragments/discussion :: discussion(reply_cont=${replies})}"></div>
 
-<!--    Report modal -->
-    <div class="modal fade" id="reportModal" tabindex="-1" aria-labelledby="reportModal" aria-hidden="true">
+    <!--    Report modal -->
+    <div class="modal fade"
+         id="reportModal"
+         tabindex="-1"
+         aria-labelledby="reportModal"
+         aria-hidden="true">
         <div class="modal-dialog">
             <div class="modal-content">
-                <form id="reporting-form" method="post" th:action="@{/topics/{id}/report(id=${topic.getId()})}">
+                <form id="reporting-form"
+                      method="post"
+                      th:action="@{/topics/{id}/report(id=${topic.getId()})}">
                     <div class="modal-header">
-                        <h5 class="modal-title">Report User</h5>
-                        <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
+                        <h5 class="modal-title">
+                            Report
+                            User</h5>
+                        <button type="button"
+                                class="btn-close"
+                                data-bs-dismiss="modal"></button>
                     </div>
                     <div class="modal-body">
-                        <input type="hidden" name="report-username" id="reportUsername">
-                        <label for="reason" class="form-label">Reason</label>
-                        <textarea id="reason"
-                                  name="reason"
-                                  class="form-control"
-                                  rows="3"
-                                  placeholder="Enter reason for reporting..."
-                                  required></textarea>
+                        <input type="hidden"
+                               name="report-username"
+                               id="reportUsername">
+                        <label for="reason"
+                               class="form-label">Reason</label>
+                        <textarea
+                                id="reason"
+                                name="reason"
+                                class="form-control"
+                                rows="3"
+                                placeholder="Enter reason for reporting..."
+                                required></textarea>
                     </div>
                     <div class="modal-footer">
                         <button type="button"
                                 class="btn btn-secondary"
-                                data-bs-dismiss="modal">Cancel</button>
+                                data-bs-dismiss="modal">
+                            Cancel
+                        </button>
                         <button type="submit"
-                                class="btn btn-danger">Submit Report</button>
+                                class="btn btn-danger">
+                            Submit
+                            Report
+                        </button>
                     </div>
                 </form>
@@ -459,8 +485,8 @@
             editClasses(editBox, 'd-block', 'd-none')
             contentBox.classList.remove("d-none")
-        }else if(target.classList.contains("report-btn")){
-           const userForReporting = target.dataset.username
-           const userForReportingInput = document.querySelector('#reportUsername')
-            userForReportingInput.value=userForReporting
+        } else if (target.classList.contains("report-btn")) {
+            const userForReporting = target.dataset.username
+            const userForReportingInput = document.querySelector('#reportUsername')
+            userForReportingInput.value = userForReporting
         }
     })
