diff --git a/reviewboard/reviews/detail.py b/reviewboard/reviews/detail.py
index 3b0c72f2bc718c5dfaddde4f8868d24f679dc14b..5e67850da4d0cca4117174b26ae8b18a063fd785 100644
--- a/reviewboard/reviews/detail.py
+++ b/reviewboard/reviews/detail.py
@@ -319,7 +319,8 @@ class ReviewRequestPageData(object):
 
         # Get the active draft (if any).
         if self._needs_draft:
-            self.draft = self.review_request.get_draft(self.request.user)
+            if self.review_request.is_mutable_by(self.request.user):
+                self.draft = self.review_request.get_draft()
 
         # Get diffsets.
         if self._needs_reviews:
diff --git a/reviewboard/reviews/tests/test_batch_view.py b/reviewboard/reviews/tests/test_batch_view.py
index ec62a3d0fd1783d69a27355d049b549107ca668c..d8a1f76c4efad39ceb5325806ec94f85918ef8de 100644
--- a/reviewboard/reviews/tests/test_batch_view.py
+++ b/reviewboard/reviews/tests/test_batch_view.py
@@ -748,6 +748,32 @@ class BatchOperationViewTests(kgb.SpyAgency, EmailTestHelper, TestCase):
         self.assertTrue(rr.public)
         self.assertEqual(rr.summary, 'Updated Summary')
 
+    def test_publish_other_draft_as_admin(self) -> None:
+        """Testing BatchOperationView publish op with an admin publishing
+        a draft on another user's review request
+        """
+        self.client.login(username='admin', password='admin')
+        grumpy = User.objects.get(username='grumpy')
+
+        rr = self.create_review_request(publish=True,
+                                        target_people=[grumpy])
+        draft = self.create_review_request_draft(rr)
+        draft.summary = 'Updated Summary'
+        draft.save(update_fields=('summary',))
+
+        response = self.client.post(self.url, data={
+            'batch': json.dumps({
+                'op': 'publish',
+                'review_requests': [rr.pk],
+            }),
+        })
+        self.assertEqual(response.status_code, 200)
+
+        rr.refresh_from_db()
+
+        self.assertTrue(rr.public)
+        self.assertEqual(rr.summary, 'Updated Summary')
+
     def test_publish_permissions(self) -> None:
         """Testing BatchOperationView publish op with non-owner user"""
         self.client.login(username='grumpy', password='grumpy')
diff --git a/reviewboard/reviews/views/batch.py b/reviewboard/reviews/views/batch.py
index 8237720ad7ce7f7922b4243c6d60a5fa33126d53..be94cac5bd1423e68ae619a7dc5872f554f11808 100644
--- a/reviewboard/reviews/views/batch.py
+++ b/reviewboard/reviews/views/batch.py
@@ -336,7 +336,7 @@ class BatchOperationView(CheckRequestMethodViewMixin,
                                   % review_request.display_id),
                     },
                     status=403)
-            elif not review_request.get_draft(user):
+            elif not review_request.get_draft():
                 return JsonResponse(
                     data={
                         'stat': 'fail',
