Skip to content

Commit 32b1ffd

Browse files
committed
Add default View, Edit, and Join Policies to Projects
Summary: Fixes T6567, lets admins set a default policy for new Projects. Test Plan: Changed the default Policy, created a new Project. Project had correct defaults. Reviewers: btrahan, epriestley Reviewed By: epriestley Subscribers: Korvin, epriestley Maniphest Tasks: T6567 Differential Revision: https://secure.phabricator.com/D10890
1 parent 1a8d876 commit 32b1ffd

File tree

6 files changed

+72
-3
lines changed

6 files changed

+72
-3
lines changed

src/__phutil_library_map__.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2848,6 +2848,9 @@
28482848
'ProjectConduitAPIMethod' => 'applications/project/conduit/ProjectConduitAPIMethod.php',
28492849
'ProjectCreateConduitAPIMethod' => 'applications/project/conduit/ProjectCreateConduitAPIMethod.php',
28502850
'ProjectCreateProjectsCapability' => 'applications/project/capability/ProjectCreateProjectsCapability.php',
2851+
'ProjectDefaultEditCapability' => 'applications/project/capability/ProjectDefaultEditCapability.php',
2852+
'ProjectDefaultJoinCapability' => 'applications/project/capability/ProjectDefaultJoinCapability.php',
2853+
'ProjectDefaultViewCapability' => 'applications/project/capability/ProjectDefaultViewCapability.php',
28512854
'ProjectQueryConduitAPIMethod' => 'applications/project/conduit/ProjectQueryConduitAPIMethod.php',
28522855
'ProjectRemarkupRule' => 'applications/project/remarkup/ProjectRemarkupRule.php',
28532856
'ProjectRemarkupRuleTestCase' => 'applications/project/remarkup/__tests__/ProjectRemarkupRuleTestCase.php',
@@ -6090,6 +6093,9 @@
60906093
'ProjectConduitAPIMethod' => 'ConduitAPIMethod',
60916094
'ProjectCreateConduitAPIMethod' => 'ProjectConduitAPIMethod',
60926095
'ProjectCreateProjectsCapability' => 'PhabricatorPolicyCapability',
6096+
'ProjectDefaultEditCapability' => 'PhabricatorPolicyCapability',
6097+
'ProjectDefaultJoinCapability' => 'PhabricatorPolicyCapability',
6098+
'ProjectDefaultViewCapability' => 'PhabricatorPolicyCapability',
60936099
'ProjectQueryConduitAPIMethod' => 'ProjectConduitAPIMethod',
60946100
'ProjectRemarkupRule' => 'PhabricatorObjectRemarkupRule',
60956101
'ProjectRemarkupRuleTestCase' => 'PhabricatorTestCase',

src/applications/project/application/PhabricatorProjectApplication.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,18 @@ protected function getCustomCapabilities() {
9898
ProjectCanLockProjectsCapability::CAPABILITY => array(
9999
'default' => PhabricatorPolicies::POLICY_ADMIN,
100100
),
101+
ProjectDefaultViewCapability::CAPABILITY => array(
102+
'caption' => pht(
103+
'Default view policy for newly created projects.'),
104+
),
105+
ProjectDefaultEditCapability::CAPABILITY => array(
106+
'caption' => pht(
107+
'Default edit policy for newly created projects.'),
108+
),
109+
ProjectDefaultJoinCapability::CAPABILITY => array(
110+
'caption' => pht(
111+
'Default join policy for newly created projects.'),
112+
),
101113
);
102114
}
103115

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
final class ProjectDefaultEditCapability
4+
extends PhabricatorPolicyCapability {
5+
6+
const CAPABILITY = 'project.default.edit';
7+
8+
public function getCapabilityName() {
9+
return pht('Default Edit Policy');
10+
}
11+
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
final class ProjectDefaultJoinCapability
4+
extends PhabricatorPolicyCapability {
5+
6+
const CAPABILITY = 'project.default.join';
7+
8+
public function getCapabilityName() {
9+
return pht('Default Join Policy');
10+
}
11+
12+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
final class ProjectDefaultViewCapability
4+
extends PhabricatorPolicyCapability {
5+
6+
const CAPABILITY = 'project.default.view';
7+
8+
public function getCapabilityName() {
9+
return pht('Default View Policy');
10+
}
11+
12+
public function shouldAllowPublicPolicySetting() {
13+
return true;
14+
}
15+
}

src/applications/project/storage/PhabricatorProject.php

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,26 @@ final class PhabricatorProject extends PhabricatorProjectDAO
3636
const TABLE_DATASOURCE_TOKEN = 'project_datasourcetoken';
3737

3838
public static function initializeNewProject(PhabricatorUser $actor) {
39+
$app = id(new PhabricatorApplicationQuery())
40+
->setViewer(PhabricatorUser::getOmnipotentUser())
41+
->withClasses(array('PhabricatorProjectApplication'))
42+
->executeOne();
43+
44+
$view_policy = $app->getPolicy(
45+
ProjectDefaultViewCapability::CAPABILITY);
46+
$edit_policy = $app->getPolicy(
47+
ProjectDefaultEditCapability::CAPABILITY);
48+
$join_policy = $app->getPolicy(
49+
ProjectDefaultJoinCapability::CAPABILITY);
50+
3951
return id(new PhabricatorProject())
4052
->setName('')
4153
->setAuthorPHID($actor->getPHID())
4254
->setIcon(self::DEFAULT_ICON)
4355
->setColor(self::DEFAULT_COLOR)
44-
->setViewPolicy(PhabricatorPolicies::POLICY_USER)
45-
->setEditPolicy(PhabricatorPolicies::POLICY_USER)
46-
->setJoinPolicy(PhabricatorPolicies::POLICY_USER)
56+
->setViewPolicy($view_policy)
57+
->setEditPolicy($edit_policy)
58+
->setJoinPolicy($join_policy)
4759
->setIsMembershipLocked(0)
4860
->attachMemberPHIDs(array())
4961
->attachSlugs(array());

0 commit comments

Comments
 (0)