Add new interface `ICommentPermissionManager`
authorCyperghost <olaf_schmitz_1@t-online.de>
Mon, 25 Mar 2024 09:49:26 +0000 (10:49 +0100)
committerCyperghost <olaf_schmitz_1@t-online.de>
Mon, 25 Mar 2024 09:49:26 +0000 (10:49 +0100)
wcfsetup/install/files/lib/system/comment/manager/AbstractCommentManager.class.php
wcfsetup/install/files/lib/system/comment/manager/ICommentManager.class.php
wcfsetup/install/files/lib/system/comment/manager/ICommentPermissionManager.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/moderation/queue/AbstractCommentCommentModerationQueueHandler.class.php
wcfsetup/install/files/lib/system/moderation/queue/AbstractCommentResponseModerationQueueHandler.class.php

index 3170f23ac418332ca568b22e8cc77959d53f321c..33c2ac44667f1070d8480edd2dd9d4e38f4db5fa 100644 (file)
@@ -5,7 +5,6 @@ namespace wcf\system\comment\manager;
 use wcf\data\comment\Comment;
 use wcf\data\comment\response\CommentResponse;
 use wcf\data\DatabaseObjectDecorator;
-use wcf\data\user\UserProfile;
 use wcf\system\bbcode\BBCodeHandler;
 use wcf\system\SingletonFactory;
 use wcf\system\WCF;
@@ -161,15 +160,6 @@ abstract class AbstractCommentManager extends SingletonFactory implements IComme
         return WCF::getSession()->getPermission($this->permissionCanModerate) ? true : false;
     }
 
-    #[\Override]
-    public function canModerateObject(int $objectTypeID, int $objectID, UserProfile $user): bool
-    {
-        if (!$this->canViewObject($objectID, $user)) {
-            return false;
-        }
-        return (bool)$user->getPermission($this->permissionCanModerate);
-    }
-
     /**
      * Returns true if the current user may edit a comment/response.
      *
index 12f6dc8939d3af6fb47b556ac5a20c7b15c60edc..e6714113785bc6ab0f0748efceb2f05fa5ef3bda 100644 (file)
@@ -4,7 +4,6 @@ namespace wcf\system\comment\manager;
 
 use wcf\data\comment\Comment;
 use wcf\data\comment\response\CommentResponse;
-use wcf\data\user\UserProfile;
 
 /**
  * Default interface for comment managers.
@@ -73,12 +72,6 @@ interface ICommentManager
      */
     public function canModerate($objectTypeID, $objectID);
 
-    /**
-     * Returns true if the user may moderate content identified by
-     * object type id and object id.
-     */
-    public function canModerateObject(int $objectTypeID, int $objectID, UserProfile $user): bool;
-
     /**
      * Returns the amount of comments per page.
      *
@@ -131,11 +124,6 @@ interface ICommentManager
      */
     public function isAccessible($objectID, $validateWritePermission = false);
 
-    /**
-     * Returns true if the user may read content identified by object type id and object id.
-     */
-    public function canViewObject(int $objectID, UserProfile $user): bool;
-
     /**
      * Updates total count of comments (includes responses).
      *
diff --git a/wcfsetup/install/files/lib/system/comment/manager/ICommentPermissionManager.php b/wcfsetup/install/files/lib/system/comment/manager/ICommentPermissionManager.php
new file mode 100644 (file)
index 0000000..b797c41
--- /dev/null
@@ -0,0 +1,26 @@
+<?php
+
+namespace wcf\system\comment\manager;
+
+use wcf\data\user\UserProfile;
+
+/**
+ * Interface for comment managers that provide permission checks.
+ *
+ * @author      Olaf Braun
+ * @copyright   2001-2024 WoltLab GmbH
+ * @license     GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ */
+interface ICommentPermissionManager extends ICommentManager
+{
+    /**
+     * Returns true if the user may moderate content identified by
+     * object type id and object id.
+     */
+    public function canModerateObject(int $objectTypeID, int $objectID, UserProfile $user): bool;
+
+    /**
+     * Returns true if the user may read content identified by object type id and object id.
+     */
+    public function canViewObject(int $objectID, UserProfile $user): bool;
+}
index c09110b346234177909cefdeb77cd6d2b59f7372..a11bb06a32e16259b5569ad4d6137d29bdc0e238 100644 (file)
@@ -11,6 +11,7 @@ use wcf\data\object\type\ObjectTypeCache;
 use wcf\system\cache\runtime\CommentRuntimeCache;
 use wcf\system\cache\runtime\UserProfileRuntimeCache;
 use wcf\system\comment\manager\ICommentManager;
+use wcf\system\comment\manager\ICommentPermissionManager;
 use wcf\system\WCF;
 
 /**
@@ -179,8 +180,12 @@ class AbstractCommentCommentModerationQueueHandler extends AbstractModerationQue
         if ($comment === null) {
             return false;
         }
+        $manager = $this->getCommentManager($comment);
+        if (!($manager instanceof ICommentPermissionManager)) {
+            return false;
+        }
 
-        return $this->getCommentManager($comment)->canModerateObject(
+        return $manager->canModerateObject(
             $comment->objectTypeID,
             $comment->objectID,
             UserProfileRuntimeCache::getInstance()->getObject($userID)
index 0c18ffa7877b01d9ef9928d3696c76fe19b6c0d0..c0a28d21ed4cf6c4c4e6221c203e4e71e5677622 100644 (file)
@@ -11,6 +11,7 @@ use wcf\data\moderation\queue\ViewableModerationQueue;
 use wcf\system\cache\runtime\CommentResponseRuntimeCache;
 use wcf\system\cache\runtime\CommentRuntimeCache;
 use wcf\system\cache\runtime\UserProfileRuntimeCache;
+use wcf\system\comment\manager\ICommentPermissionManager;
 use wcf\system\database\util\PreparedStatementConditionBuilder;
 use wcf\system\WCF;
 
@@ -179,8 +180,12 @@ class AbstractCommentResponseModerationQueueHandler extends AbstractCommentComme
         if ($comment === null) {
             return false;
         }
+        $manager = $this->getCommentManager($comment);
+        if (!($manager instanceof ICommentPermissionManager)) {
+            return false;
+        }
 
-        return $this->getCommentManager($comment)->canModerateObject(
+        return $manager->canModerateObject(
             $comment->objectTypeID,
             $comment->objectID,
             UserProfileRuntimeCache::getInstance()->getObject($userID)