@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add default create, view, edit capabilities to Packages

Summary:
Ref T8116. This adds a control for creating publishers (default: administrators) and default publisher/package edit controls.

I've left the edit defaults at "no one" for now to force you to select a policy. This might be something to look at later.

Test Plan: Created publishers, packages. Tried to create publishers with "can create" policy set restrictively.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T8116

Differential Revision: https://secure.phabricator.com/D16319

+114 -2
+8
src/__phutil_library_map__.php
··· 2974 2974 'PhabricatorPHPMailerConfigOptions' => 'applications/config/option/PhabricatorPHPMailerConfigOptions.php', 2975 2975 'PhabricatorPackagesApplication' => 'applications/packages/application/PhabricatorPackagesApplication.php', 2976 2976 'PhabricatorPackagesController' => 'applications/packages/controller/PhabricatorPackagesController.php', 2977 + 'PhabricatorPackagesCreatePublisherCapability' => 'applications/packages/capability/PhabricatorPackagesCreatePublisherCapability.php', 2977 2978 'PhabricatorPackagesDAO' => 'applications/packages/storage/PhabricatorPackagesDAO.php', 2978 2979 'PhabricatorPackagesEditEngine' => 'applications/packages/editor/PhabricatorPackagesEditEngine.php', 2979 2980 'PhabricatorPackagesEditor' => 'applications/packages/editor/PhabricatorPackagesEditor.php', 2980 2981 'PhabricatorPackagesPackage' => 'applications/packages/storage/PhabricatorPackagesPackage.php', 2981 2982 'PhabricatorPackagesPackageController' => 'applications/packages/controller/PhabricatorPackagesPackageController.php', 2982 2983 'PhabricatorPackagesPackageDatasource' => 'applications/packages/typeahead/PhabricatorPackagesPackageDatasource.php', 2984 + 'PhabricatorPackagesPackageDefaultEditCapability' => 'applications/packages/capability/PhabricatorPackagesPackageDefaultEditCapability.php', 2985 + 'PhabricatorPackagesPackageDefaultViewCapability' => 'applications/packages/capability/PhabricatorPackagesPackageDefaultViewCapability.php', 2983 2986 'PhabricatorPackagesPackageEditConduitAPIMethod' => 'applications/packages/conduit/PhabricatorPackagesPackageEditConduitAPIMethod.php', 2984 2987 'PhabricatorPackagesPackageEditController' => 'applications/packages/controller/PhabricatorPackagesPackageEditController.php', 2985 2988 'PhabricatorPackagesPackageEditEngine' => 'applications/packages/editor/PhabricatorPackagesPackageEditEngine.php', ··· 2999 3002 'PhabricatorPackagesPublisher' => 'applications/packages/storage/PhabricatorPackagesPublisher.php', 3000 3003 'PhabricatorPackagesPublisherController' => 'applications/packages/controller/PhabricatorPackagesPublisherController.php', 3001 3004 'PhabricatorPackagesPublisherDatasource' => 'applications/packages/typeahead/PhabricatorPackagesPublisherDatasource.php', 3005 + 'PhabricatorPackagesPublisherDefaultEditCapability' => 'applications/packages/capability/PhabricatorPackagesPublisherDefaultEditCapability.php', 3002 3006 'PhabricatorPackagesPublisherEditConduitAPIMethod' => 'applications/packages/conduit/PhabricatorPackagesPublisherEditConduitAPIMethod.php', 3003 3007 'PhabricatorPackagesPublisherEditController' => 'applications/packages/controller/PhabricatorPackagesPublisherEditController.php', 3004 3008 'PhabricatorPackagesPublisherEditEngine' => 'applications/packages/editor/PhabricatorPackagesPublisherEditEngine.php', ··· 7789 7793 'PhabricatorPHPMailerConfigOptions' => 'PhabricatorApplicationConfigOptions', 7790 7794 'PhabricatorPackagesApplication' => 'PhabricatorApplication', 7791 7795 'PhabricatorPackagesController' => 'PhabricatorController', 7796 + 'PhabricatorPackagesCreatePublisherCapability' => 'PhabricatorPolicyCapability', 7792 7797 'PhabricatorPackagesDAO' => 'PhabricatorLiskDAO', 7793 7798 'PhabricatorPackagesEditEngine' => 'PhabricatorEditEngine', 7794 7799 'PhabricatorPackagesEditor' => 'PhabricatorApplicationTransactionEditor', ··· 7803 7808 ), 7804 7809 'PhabricatorPackagesPackageController' => 'PhabricatorPackagesController', 7805 7810 'PhabricatorPackagesPackageDatasource' => 'PhabricatorTypeaheadDatasource', 7811 + 'PhabricatorPackagesPackageDefaultEditCapability' => 'PhabricatorPolicyCapability', 7812 + 'PhabricatorPackagesPackageDefaultViewCapability' => 'PhabricatorPolicyCapability', 7806 7813 'PhabricatorPackagesPackageEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', 7807 7814 'PhabricatorPackagesPackageEditController' => 'PhabricatorPackagesPackageController', 7808 7815 'PhabricatorPackagesPackageEditEngine' => 'PhabricatorPackagesEditEngine', ··· 7830 7837 ), 7831 7838 'PhabricatorPackagesPublisherController' => 'PhabricatorPackagesController', 7832 7839 'PhabricatorPackagesPublisherDatasource' => 'PhabricatorTypeaheadDatasource', 7840 + 'PhabricatorPackagesPublisherDefaultEditCapability' => 'PhabricatorPolicyCapability', 7833 7841 'PhabricatorPackagesPublisherEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', 7834 7842 'PhabricatorPackagesPublisherEditController' => 'PhabricatorPackagesPublisherController', 7835 7843 'PhabricatorPackagesPublisherEditEngine' => 'PhabricatorPackagesEditEngine',
+21
src/applications/packages/application/PhabricatorPackagesApplication.php
··· 26 26 return true; 27 27 } 28 28 29 + protected function getCustomCapabilities() { 30 + return array( 31 + PhabricatorPackagesCreatePublisherCapability::CAPABILITY => array( 32 + 'default' => PhabricatorPolicies::POLICY_ADMIN, 33 + ), 34 + PhabricatorPackagesPublisherDefaultEditCapability::CAPABILITY => array( 35 + 'caption' => pht('Default edit policy for newly created publishers.'), 36 + 'template' => PhabricatorPackagesPublisherPHIDType::TYPECONST, 37 + 'default' => PhabricatorPolicies::POLICY_NOONE, 38 + ), 39 + PhabricatorPackagesPackageDefaultViewCapability::CAPABILITY => array( 40 + 'caption' => pht('Default edit policy for newly created packages.'), 41 + 'template' => PhabricatorPackagesPackagePHIDType::TYPECONST, 42 + ), 43 + PhabricatorPackagesPackageDefaultEditCapability::CAPABILITY => array( 44 + 'caption' => pht('Default view policy for newly created packages.'), 45 + 'template' => PhabricatorPackagesPackagePHIDType::TYPECONST, 46 + 'default' => PhabricatorPolicies::POLICY_NOONE, 47 + ), 48 + ); 49 + } 29 50 public function getRoutes() { 30 51 return array( 31 52 '/package/' => array(
+16
src/applications/packages/capability/PhabricatorPackagesCreatePublisherCapability.php
··· 1 + <?php 2 + 3 + final class PhabricatorPackagesCreatePublisherCapability 4 + extends PhabricatorPolicyCapability { 5 + 6 + const CAPABILITY = 'packages.publisher.create'; 7 + 8 + public function getCapabilityName() { 9 + return pht('Can Create Publishers'); 10 + } 11 + 12 + public function describeCapabilityRejection() { 13 + return pht('You do not have permission to create publishers.'); 14 + } 15 + 16 + }
+12
src/applications/packages/capability/PhabricatorPackagesPackageDefaultEditCapability.php
··· 1 + <?php 2 + 3 + final class PhabricatorPackagesPackageDefaultEditCapability 4 + extends PhabricatorPolicyCapability { 5 + 6 + const CAPABILITY = 'packages.package.default.edit'; 7 + 8 + public function getCapabilityName() { 9 + return pht('Default Package Edit Policy'); 10 + } 11 + 12 + }
+16
src/applications/packages/capability/PhabricatorPackagesPackageDefaultViewCapability.php
··· 1 + <?php 2 + 3 + final class PhabricatorPackagesPackageDefaultViewCapability 4 + extends PhabricatorPolicyCapability { 5 + 6 + const CAPABILITY = 'packages.package.default.view'; 7 + 8 + public function getCapabilityName() { 9 + return pht('Default Package View Policy'); 10 + } 11 + 12 + public function shouldAllowPublicPolicySetting() { 13 + return true; 14 + } 15 + 16 + }
+12
src/applications/packages/capability/PhabricatorPackagesPublisherDefaultEditCapability.php
··· 1 + <?php 2 + 3 + final class PhabricatorPackagesPublisherDefaultEditCapability 4 + extends PhabricatorPolicyCapability { 5 + 6 + const CAPABILITY = 'packages.publisher.default.edit'; 7 + 8 + public function getCapabilityName() { 9 + return pht('Default Publisher Edit Policy'); 10 + } 11 + 12 + }
+5
src/applications/packages/editor/PhabricatorPackagesPublisherEditEngine.php
··· 62 62 return $object->getURI(); 63 63 } 64 64 65 + protected function getCreateNewObjectPolicy() { 66 + return $this->getApplication()->getPolicy( 67 + PhabricatorPackagesCreatePublisherCapability::CAPABILITY); 68 + } 69 + 65 70 protected function buildCustomEditFields($object) { 66 71 $fields = array(); 67 72
+14 -1
src/applications/packages/storage/PhabricatorPackagesPackage.php
··· 19 19 private $publisher = self::ATTACHABLE; 20 20 21 21 public static function initializeNewPackage(PhabricatorUser $actor) { 22 - return id(new self()); 22 + $packages_application = id(new PhabricatorApplicationQuery()) 23 + ->setViewer($actor) 24 + ->withClasses(array('PhabricatorPackagesApplication')) 25 + ->executeOne(); 26 + 27 + $view_policy = $packages_application->getPolicy( 28 + PhabricatorPackagesPackageDefaultViewCapability::CAPABILITY); 29 + 30 + $edit_policy = $packages_application->getPolicy( 31 + PhabricatorPackagesPackageDefaultEditCapability::CAPABILITY); 32 + 33 + return id(new self()) 34 + ->setViewPolicy($view_policy) 35 + ->setEditPolicy($edit_policy); 23 36 } 24 37 25 38 protected function getConfiguration() {
+10 -1
src/applications/packages/storage/PhabricatorPackagesPublisher.php
··· 15 15 protected $editPolicy; 16 16 17 17 public static function initializeNewPublisher(PhabricatorUser $actor) { 18 - return id(new self()); 18 + $packages_application = id(new PhabricatorApplicationQuery()) 19 + ->setViewer($actor) 20 + ->withClasses(array('PhabricatorPackagesApplication')) 21 + ->executeOne(); 22 + 23 + $edit_policy = $packages_application->getPolicy( 24 + PhabricatorPackagesPublisherDefaultEditCapability::CAPABILITY); 25 + 26 + return id(new self()) 27 + ->setEditPolicy($edit_policy); 19 28 } 20 29 21 30 protected function getConfiguration() {