Changeset View
Changeset View
Standalone View
Standalone View
src/applications/policy/filter/PhabricatorPolicyFilter.php
Show First 20 Lines • Show All 84 Lines • ▼ Show 20 Lines | public static function hasCapability( | ||||
return (count($result) == 1); | return (count($result) == 1); | ||||
} | } | ||||
public static function canInteract( | public static function canInteract( | ||||
PhabricatorUser $user, | PhabricatorUser $user, | ||||
PhabricatorPolicyInterface $object) { | 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 = $object->getCapabilities(); | ||||
$capabilities = array_fuse($capabilities); | $capabilities = array_fuse($capabilities); | ||||
$can_interact = PhabricatorPolicyCapability::CAN_INTERACT; | $can_interact = PhabricatorPolicyCapability::CAN_INTERACT; | ||||
$can_view = PhabricatorPolicyCapability::CAN_VIEW; | $can_view = PhabricatorPolicyCapability::CAN_VIEW; | ||||
$require = array(); | $require = array(); | ||||
// If the object doesn't support a separate "Interact" capability, we | // If the object doesn't support a separate "Interact" capability, we | ||||
// only use the "View" capability: for most objects, you can interact | // only use the "View" capability: for most objects, you can interact | ||||
// with them if you can see them. | // with them if you can see them. | ||||
$require[] = $can_view; | $require[] = $can_view; | ||||
if (isset($capabilities[$can_interact])) { | if (isset($capabilities[$can_interact])) { | ||||
$require[] = $can_interact; | $require[] = $can_interact; | ||||
} | } | ||||
foreach ($require as $capability) { | return $require; | ||||
if (!self::hasCapability($user, $object, $capability)) { | |||||
return false; | |||||
} | |||||
} | |||||
return true; | |||||
} | } | ||||
public function setViewer(PhabricatorUser $user) { | public function setViewer(PhabricatorUser $user) { | ||||
$this->viewer = $user; | $this->viewer = $user; | ||||
return $this; | return $this; | ||||
} | } | ||||
public function requireCapabilities(array $capabilities) { | public function requireCapabilities(array $capabilities) { | ||||
▲ Show 20 Lines • Show All 850 Lines • Show Last 20 Lines |