diff --git a/src/applications/policy/filter/PhabricatorPolicyFilter.php b/src/applications/policy/filter/PhabricatorPolicyFilter.php index a5c9f356f4..4ea7ce1549 100644 --- a/src/applications/policy/filter/PhabricatorPolicyFilter.php +++ b/src/applications/policy/filter/PhabricatorPolicyFilter.php @@ -90,6 +90,29 @@ final class PhabricatorPolicyFilter extends Phobject { PhabricatorUser $user, PhabricatorPolicyInterface $object) { + $capabilities = self::getRequiredInteractCapabilities($object); + + foreach ($capabilities as $capability) { + if (!self::hasCapability($user, $object, $capability)) { + return false; + } + } + + return true; + } + + public static function requireCanInteract( + PhabricatorUser $user, + PhabricatorPolicyInterface $object) { + + $capabilities = self::getRequiredInteractCapabilities($object); + foreach ($capabilities as $capability) { + self::requireCapability($user, $object, $capability); + } + } + + private static function getRequiredInteractCapabilities( + PhabricatorPolicyInterface $object) { $capabilities = $object->getCapabilities(); $capabilities = array_fuse($capabilities); @@ -107,13 +130,7 @@ final class PhabricatorPolicyFilter extends Phobject { $require[] = $can_interact; } - foreach ($require as $capability) { - if (!self::hasCapability($user, $object, $capability)) { - return false; - } - } - - return true; + return $require; } public function setViewer(PhabricatorUser $user) { diff --git a/src/applications/transactions/controller/PhabricatorApplicationTransactionCommentEditController.php b/src/applications/transactions/controller/PhabricatorApplicationTransactionCommentEditController.php index 4529704c2f..84fcecfa6f 100644 --- a/src/applications/transactions/controller/PhabricatorApplicationTransactionCommentEditController.php +++ b/src/applications/transactions/controller/PhabricatorApplicationTransactionCommentEditController.php @@ -36,10 +36,9 @@ final class PhabricatorApplicationTransactionCommentEditController // auditing, and editing comments serves neither goal. $object = $xaction->getObject(); - $can_interact = PhabricatorPolicyFilter::hasCapability( + $can_interact = PhabricatorPolicyFilter::canInteract( $viewer, - $object, - PhabricatorPolicyCapability::CAN_INTERACT); + $object); if (!$can_interact) { return $this->newDialog() ->setTitle(pht('Conversation Locked')) diff --git a/src/applications/transactions/editor/PhabricatorApplicationTransactionCommentEditor.php b/src/applications/transactions/editor/PhabricatorApplicationTransactionCommentEditor.php index 22acb3312f..b2405d90c4 100644 --- a/src/applications/transactions/editor/PhabricatorApplicationTransactionCommentEditor.php +++ b/src/applications/transactions/editor/PhabricatorApplicationTransactionCommentEditor.php @@ -189,10 +189,10 @@ final class PhabricatorApplicationTransactionCommentEditor $actor, $xaction, PhabricatorPolicyCapability::CAN_EDIT); - PhabricatorPolicyFilter::requireCapability( + + PhabricatorPolicyFilter::requireCanInteract( $actor, - $xaction->getObject(), - PhabricatorPolicyCapability::CAN_INTERACT); + $xaction->getObject()); } } diff --git a/src/applications/transactions/view/PhabricatorApplicationTransactionView.php b/src/applications/transactions/view/PhabricatorApplicationTransactionView.php index 7a24bf8ff8..209b6baf64 100644 --- a/src/applications/transactions/view/PhabricatorApplicationTransactionView.php +++ b/src/applications/transactions/view/PhabricatorApplicationTransactionView.php @@ -513,10 +513,9 @@ class PhabricatorApplicationTransactionView extends AphrontView { } } - $can_interact = PhabricatorPolicyFilter::hasCapability( + $can_interact = PhabricatorPolicyFilter::canInteract( $viewer, - $xaction->getObject(), - PhabricatorPolicyCapability::CAN_INTERACT); + $xaction->getObject()); $event->setCanInteract($can_interact); }