Page MenuHomePhabricator

D15275.diff
No OneTemporary

D15275.diff

diff --git a/resources/sql/autopatches/20160215.owners.policy.1.sql b/resources/sql/autopatches/20160215.owners.policy.1.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20160215.owners.policy.1.sql
@@ -0,0 +1,2 @@
+ALTER TABLE {$NAMESPACE}_owners.owners_package
+ ADD viewPolicy VARBINARY(64) NOT NULL;
diff --git a/resources/sql/autopatches/20160215.owners.policy.2.sql b/resources/sql/autopatches/20160215.owners.policy.2.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20160215.owners.policy.2.sql
@@ -0,0 +1,2 @@
+ALTER TABLE {$NAMESPACE}_owners.owners_package
+ ADD editPolicy VARBINARY(64) NOT NULL;
diff --git a/resources/sql/autopatches/20160215.owners.policy.3.sql b/resources/sql/autopatches/20160215.owners.policy.3.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20160215.owners.policy.3.sql
@@ -0,0 +1,2 @@
+UPDATE {$NAMESPACE}_owners.owners_package
+ SET viewPolicy = 'users' WHERE viewPolicy = '';
diff --git a/resources/sql/autopatches/20160215.owners.policy.4.sql b/resources/sql/autopatches/20160215.owners.policy.4.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20160215.owners.policy.4.sql
@@ -0,0 +1,2 @@
+UPDATE {$NAMESPACE}_owners.owners_package
+ SET editPolicy = 'users' WHERE editPolicy = '';
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -2665,6 +2665,8 @@
'PhabricatorOwnersCustomFieldStorage' => 'applications/owners/storage/PhabricatorOwnersCustomFieldStorage.php',
'PhabricatorOwnersCustomFieldStringIndex' => 'applications/owners/storage/PhabricatorOwnersCustomFieldStringIndex.php',
'PhabricatorOwnersDAO' => 'applications/owners/storage/PhabricatorOwnersDAO.php',
+ 'PhabricatorOwnersDefaultEditCapability' => 'applications/owners/capability/PhabricatorOwnersDefaultEditCapability.php',
+ 'PhabricatorOwnersDefaultViewCapability' => 'applications/owners/capability/PhabricatorOwnersDefaultViewCapability.php',
'PhabricatorOwnersDetailController' => 'applications/owners/controller/PhabricatorOwnersDetailController.php',
'PhabricatorOwnersEditController' => 'applications/owners/controller/PhabricatorOwnersEditController.php',
'PhabricatorOwnersListController' => 'applications/owners/controller/PhabricatorOwnersListController.php',
@@ -7036,6 +7038,8 @@
'PhabricatorOwnersCustomFieldStorage' => 'PhabricatorCustomFieldStorage',
'PhabricatorOwnersCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage',
'PhabricatorOwnersDAO' => 'PhabricatorLiskDAO',
+ 'PhabricatorOwnersDefaultEditCapability' => 'PhabricatorPolicyCapability',
+ 'PhabricatorOwnersDefaultViewCapability' => 'PhabricatorPolicyCapability',
'PhabricatorOwnersDetailController' => 'PhabricatorOwnersController',
'PhabricatorOwnersEditController' => 'PhabricatorOwnersController',
'PhabricatorOwnersListController' => 'PhabricatorOwnersController',
diff --git a/src/applications/owners/application/PhabricatorOwnersApplication.php b/src/applications/owners/application/PhabricatorOwnersApplication.php
--- a/src/applications/owners/application/PhabricatorOwnersApplication.php
+++ b/src/applications/owners/application/PhabricatorOwnersApplication.php
@@ -54,4 +54,19 @@
);
}
+ protected function getCustomCapabilities() {
+ return array(
+ PhabricatorOwnersDefaultViewCapability::CAPABILITY => array(
+ 'caption' => pht('Default view policy for newly created packages.'),
+ 'template' => PhabricatorOwnersPackagePHIDType::TYPECONST,
+ 'capability' => PhabricatorPolicyCapability::CAN_VIEW,
+ ),
+ PhabricatorOwnersDefaultEditCapability::CAPABILITY => array(
+ 'caption' => pht('Default edit policy for newly created packages.'),
+ 'template' => PhabricatorOwnersPackagePHIDType::TYPECONST,
+ 'capability' => PhabricatorPolicyCapability::CAN_EDIT,
+ ),
+ );
+ }
+
}
diff --git a/src/applications/owners/capability/PhabricatorOwnersDefaultEditCapability.php b/src/applications/owners/capability/PhabricatorOwnersDefaultEditCapability.php
new file mode 100644
--- /dev/null
+++ b/src/applications/owners/capability/PhabricatorOwnersDefaultEditCapability.php
@@ -0,0 +1,12 @@
+<?php
+
+final class PhabricatorOwnersDefaultEditCapability
+ extends PhabricatorPolicyCapability {
+
+ const CAPABILITY = 'owners.default.edit';
+
+ public function getCapabilityName() {
+ return pht('Default Edit Policy');
+ }
+
+}
diff --git a/src/applications/owners/capability/PhabricatorOwnersDefaultViewCapability.php b/src/applications/owners/capability/PhabricatorOwnersDefaultViewCapability.php
new file mode 100644
--- /dev/null
+++ b/src/applications/owners/capability/PhabricatorOwnersDefaultViewCapability.php
@@ -0,0 +1,16 @@
+<?php
+
+final class PhabricatorOwnersDefaultViewCapability
+ extends PhabricatorPolicyCapability {
+
+ const CAPABILITY = 'owners.default.view';
+
+ public function getCapabilityName() {
+ return pht('Default View Policy');
+ }
+
+ public function shouldAllowPublicPolicySetting() {
+ return true;
+ }
+
+}
diff --git a/src/applications/owners/controller/PhabricatorOwnersDetailController.php b/src/applications/owners/controller/PhabricatorOwnersDetailController.php
--- a/src/applications/owners/controller/PhabricatorOwnersDetailController.php
+++ b/src/applications/owners/controller/PhabricatorOwnersDetailController.php
@@ -211,8 +211,10 @@
private function buildPackageActionView(PhabricatorOwnersPackage $package) {
$viewer = $this->getViewer();
- // TODO: Implement this capability.
- $can_edit = true;
+ $can_edit = PhabricatorPolicyFilter::hasCapability(
+ $viewer,
+ $package,
+ PhabricatorPolicyCapability::CAN_EDIT);
$id = $package->getID();
$edit_uri = $this->getApplicationURI("/edit/{$id}/");
diff --git a/src/applications/owners/controller/PhabricatorOwnersPathsController.php b/src/applications/owners/controller/PhabricatorOwnersPathsController.php
--- a/src/applications/owners/controller/PhabricatorOwnersPathsController.php
+++ b/src/applications/owners/controller/PhabricatorOwnersPathsController.php
@@ -12,8 +12,7 @@
->requireCapabilities(
array(
PhabricatorPolicyCapability::CAN_VIEW,
- // TODO: Support this capability.
- // PhabricatorPolicyCapability::CAN_EDIT,
+ PhabricatorPolicyCapability::CAN_EDIT,
))
->needPaths(true)
->executeOne();
diff --git a/src/applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php b/src/applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php
--- a/src/applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php
+++ b/src/applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php
@@ -21,6 +21,9 @@
$types[] = PhabricatorOwnersPackageTransaction::TYPE_PATHS;
$types[] = PhabricatorOwnersPackageTransaction::TYPE_STATUS;
+ $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY;
+ $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY;
+
return $types;
}
diff --git a/src/applications/owners/storage/PhabricatorOwnersPackage.php b/src/applications/owners/storage/PhabricatorOwnersPackage.php
--- a/src/applications/owners/storage/PhabricatorOwnersPackage.php
+++ b/src/applications/owners/storage/PhabricatorOwnersPackage.php
@@ -18,6 +18,8 @@
protected $primaryOwnerPHID;
protected $mailKey;
protected $status;
+ protected $viewPolicy;
+ protected $editPolicy;
private $paths = self::ATTACHABLE;
private $owners = self::ATTACHABLE;
@@ -27,8 +29,20 @@
const STATUS_ARCHIVED = 'archived';
public static function initializeNewPackage(PhabricatorUser $actor) {
+ $app = id(new PhabricatorApplicationQuery())
+ ->setViewer($actor)
+ ->withClasses(array('PhabricatorOwnersApplication'))
+ ->executeOne();
+
+ $view_policy = $app->getPolicy(
+ PhabricatorOwnersDefaultViewCapability::CAPABILITY);
+ $edit_policy = $app->getPolicy(
+ PhabricatorOwnersDefaultEditCapability::CAPABILITY);
+
return id(new PhabricatorOwnersPackage())
->setAuditingEnabled(0)
+ ->setViewPolicy($view_policy)
+ ->setEditPolicy($edit_policy)
->attachPaths(array())
->setStatus(self::STATUS_ACTIVE)
->attachOwners(array())
@@ -287,8 +301,12 @@
}
public function getPolicy($capability) {
- // TODO: Implement proper policies.
- return PhabricatorPolicies::POLICY_USER;
+ switch ($capability) {
+ case PhabricatorPolicyCapability::CAN_VIEW:
+ return $this->getViewPolicy();
+ case PhabricatorPolicyCapability::CAN_EDIT:
+ return $this->getEditPolicy();
+ }
}
public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {

File Metadata

Mime Type
text/plain
Expires
Thu, Apr 3, 9:33 PM (4 d, 11 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7702887
Default Alt Text
D15275.diff (8 KB)

Event Timeline