mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-03 20:22:46 +01:00
466755476a
Summary: Ref T5681. Ref T8488. This allows policy rules to provide "Object Policies", which are similar to the global/basic policies: - They show up directly in the dropdown (you don't have to create a custom rule). - They don't need to create or load anything in the database. To implement one, you just add a couple methods on an existing PolicyRule that let Phabricator know it can work as an object policy rule. {F494764} These rules only show up where they make sense. For example, the "Task Author" rule is only available in Maniphest, and in "Default View Policy" / "Default Edit Policy" of the Application config. This should make T8488 easier by letting us set the default policies to "Members of Thread", without having to create a dedicated custom policy for every thread. Test Plan: - Set tasks to "Task Author" policy. - Tried to view them as other users. - Viewed transaction change strings. - Viewed policy errors. - Set them as default policies. - Verified they don't leak into other policy controls. Reviewers: btrahan Reviewed By: btrahan Subscribers: epriestley Maniphest Tasks: T5681, T8488 Differential Revision: https://secure.phabricator.com/D13257
43 lines
903 B
PHP
43 lines
903 B
PHP
<?php
|
|
|
|
final class ManiphestTaskAuthorPolicyRule
|
|
extends PhabricatorPolicyRule {
|
|
|
|
public function getObjectPolicyKey() {
|
|
return 'maniphest.author';
|
|
}
|
|
|
|
public function getObjectPolicyName() {
|
|
return pht('Task Author');
|
|
}
|
|
|
|
public function getPolicyExplanation() {
|
|
return pht('The author of this task can take this action.');
|
|
}
|
|
|
|
public function getRuleDescription() {
|
|
return pht('task author');
|
|
}
|
|
|
|
public function canApplyToObject(PhabricatorPolicyInterface $object) {
|
|
return ($object instanceof ManiphestTask);
|
|
}
|
|
|
|
public function applyRule(
|
|
PhabricatorUser $viewer,
|
|
$value,
|
|
PhabricatorPolicyInterface $object) {
|
|
|
|
$viewer_phid = $viewer->getPHID();
|
|
if (!$viewer_phid) {
|
|
return false;
|
|
}
|
|
|
|
return ($object->getAuthorPHID() == $viewer_phid);
|
|
}
|
|
|
|
public function getValueControlType() {
|
|
return self::CONTROL_TYPE_NONE;
|
|
}
|
|
|
|
}
|