Page MenuHomePhabricator

D7279.id.diff
No OneTemporary

D7279.id.diff

Index: src/__phutil_library_map__.php
===================================================================
--- src/__phutil_library_map__.php
+++ src/__phutil_library_map__.php
@@ -2018,6 +2018,7 @@
'PonderVote' => 'applications/ponder/constants/PonderVote.php',
'PonderVoteEditor' => 'applications/ponder/editor/PonderVoteEditor.php',
'PonderVoteSaveController' => 'applications/ponder/controller/PonderVoteSaveController.php',
+ 'ProjectCapabilityCreateProjects' => 'applications/project/capability/ProjectCapabilityCreateProjects.php',
'ProjectRemarkupRule' => 'applications/project/remarkup/ProjectRemarkupRule.php',
'QueryFormattingTestCase' => 'infrastructure/storage/__tests__/QueryFormattingTestCase.php',
'ReleephAuthorFieldSpecification' => 'applications/releeph/field/specification/ReleephAuthorFieldSpecification.php',
@@ -4309,6 +4310,7 @@
'PonderVote' => 'PonderConstants',
'PonderVoteEditor' => 'PhabricatorEditor',
'PonderVoteSaveController' => 'PonderController',
+ 'ProjectCapabilityCreateProjects' => 'PhabricatorPolicyCapability',
'ProjectRemarkupRule' => 'PhabricatorRemarkupRuleObject',
'QueryFormattingTestCase' => 'PhabricatorTestCase',
'ReleephAuthorFieldSpecification' => 'ReleephFieldSpecification',
Index: src/applications/project/application/PhabricatorApplicationProject.php
===================================================================
--- src/applications/project/application/PhabricatorApplicationProject.php
+++ src/applications/project/application/PhabricatorApplicationProject.php
@@ -49,4 +49,11 @@
);
}
+ protected function getCustomCapabilities() {
+ return array(
+ ProjectCapabilityCreateProjects::CAPABILITY => array(
+ ),
+ );
+ }
+
}
Index: src/applications/project/capability/ProjectCapabilityCreateProjects.php
===================================================================
--- /dev/null
+++ src/applications/project/capability/ProjectCapabilityCreateProjects.php
@@ -0,0 +1,20 @@
+<?php
+
+final class ProjectCapabilityCreateProjects
+ extends PhabricatorPolicyCapability {
+
+ const CAPABILITY = 'project.create';
+
+ public function getCapabilityKey() {
+ return self::CAPABILITY;
+ }
+
+ public function getCapabilityName() {
+ return pht('Can Create Projects');
+ }
+
+ public function describeCapabilityRejection() {
+ return pht('You do not have permission to create new projects.');
+ }
+
+}
Index: src/applications/project/controller/PhabricatorProjectController.php
===================================================================
--- src/applications/project/controller/PhabricatorProjectController.php
+++ src/applications/project/controller/PhabricatorProjectController.php
@@ -24,11 +24,16 @@
public function buildApplicationCrumbs() {
$crumbs = parent::buildApplicationCrumbs();
+ $can_create = $this->hasApplicationCapability(
+ ProjectCapabilityCreateProjects::CAPABILITY);
+
$crumbs->addAction(
id(new PHUIListItemView())
->setName(pht('Create Project'))
->setHref($this->getApplicationURI('create/'))
- ->setIcon('create'));
+ ->setIcon('create')
+ ->setWorkflow(!$can_create)
+ ->setDisabled(!$can_create));
return $crumbs;
}
Index: src/applications/project/controller/PhabricatorProjectCreateController.php
===================================================================
--- src/applications/project/controller/PhabricatorProjectCreateController.php
+++ src/applications/project/controller/PhabricatorProjectCreateController.php
@@ -9,6 +9,9 @@
$request = $this->getRequest();
$user = $request->getUser();
+ $this->requireApplicationCapability(
+ ProjectCapabilityCreateProjects::CAPABILITY);
+
$project = new PhabricatorProject();
$project->setAuthorPHID($user->getPHID());
$project->attachMemberPHIDs(array());

File Metadata

Mime Type
text/plain
Expires
Sun, Mar 16, 3:06 AM (1 w, 9 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7223691
Default Alt Text
D7279.id.diff (3 KB)

Event Timeline