summaryrefslogtreecommitdiffstats
path: root/java/com/google/gerrit/server/permissions/ChangeControl.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/google/gerrit/server/permissions/ChangeControl.java')
-rw-r--r--java/com/google/gerrit/server/permissions/ChangeControl.java41
1 files changed, 25 insertions, 16 deletions
diff --git a/java/com/google/gerrit/server/permissions/ChangeControl.java b/java/com/google/gerrit/server/permissions/ChangeControl.java
index ee36200283..c3be7f2609 100644
--- a/java/com/google/gerrit/server/permissions/ChangeControl.java
+++ b/java/com/google/gerrit/server/permissions/ChangeControl.java
@@ -65,6 +65,8 @@ class ChangeControl {
private final RefControl refControl;
private final ChangeNotes notes;
+ private ChangeData cd;
+
private ChangeControl(
ChangeData.Factory changeDataFactory, RefControl refControl, ChangeNotes notes) {
this.changeDataFactory = changeDataFactory;
@@ -73,7 +75,8 @@ class ChangeControl {
}
ForChange asForChange(@Nullable ChangeData cd) {
- return new ForChangeImpl(cd);
+ setChangeData(cd);
+ return new ForChangeImpl();
}
private CurrentUser getUser() {
@@ -88,12 +91,27 @@ class ChangeControl {
return notes.getChange();
}
+ private ChangeData changeData() {
+ if (cd == null) {
+ cd = changeDataFactory.create(notes);
+ }
+ return cd;
+ }
+
+ ChangeControl setChangeData(@Nullable ChangeData cd) {
+ if (cd != null) {
+ this.cd = cd;
+ }
+ return this;
+ }
+
/** Can this user see this change? */
- private boolean isVisible(@Nullable ChangeData cd) {
- if (getChange().isPrivate() && !isPrivateVisible(cd)) {
+ boolean isVisible() {
+ if (getChange().isPrivate() && !isPrivateVisible(changeData())) {
return false;
}
- return refControl.isVisible();
+ // Does the user have READ permission on the destination?
+ return refControl.asForRef().testOrFalse(RefPermission.READ);
}
/** Can this user abandon this change? */
@@ -219,20 +237,11 @@ class ChangeControl {
}
private class ForChangeImpl extends ForChange {
- private ChangeData cd;
+
private Map<String, PermissionRange> labels;
private String resourcePath;
- ForChangeImpl(@Nullable ChangeData cd) {
- this.cd = cd;
- }
-
- private ChangeData changeData() {
- if (cd == null) {
- cd = changeDataFactory.create(notes);
- }
- return cd;
- }
+ private ForChangeImpl() {}
@Override
public String resourcePath() {
@@ -285,7 +294,7 @@ class ChangeControl {
try {
switch (perm) {
case READ:
- return isVisible(changeData());
+ return isVisible();
case ABANDON:
return canAbandon();
case DELETE: