Remove user-rescoping from PermissionBackend

We previously had the option to rescope a permission backend to a user
when being already scoped to a change, ref or project. This was in place
for performance reasons. A recent experiment showed that this is not
needed.

Removing rescoping leads to a cleaner interface definition.

Change-Id: I3fd524d26a72f4af020c0bdef5122ee5ef7f1af8
diff --git a/java/com/google/gerrit/server/permissions/ChangeControl.java b/java/com/google/gerrit/server/permissions/ChangeControl.java
index 4aaf61d..b922147 100644
--- a/java/com/google/gerrit/server/permissions/ChangeControl.java
+++ b/java/com/google/gerrit/server/permissions/ChangeControl.java
@@ -261,16 +261,6 @@
     }
 
     @Override
-    public ForChange user(CurrentUser user) {
-      return forUser(user).asForChange(cd, db);
-    }
-
-    @Override
-    public ForChange absentUser(Account.Id id) {
-      return user(identifiedUserFactory.create(id));
-    }
-
-    @Override
     public String resourcePath() {
       if (resourcePath == null) {
         resourcePath =
diff --git a/java/com/google/gerrit/server/permissions/FailedPermissionBackend.java b/java/com/google/gerrit/server/permissions/FailedPermissionBackend.java
index 6c6f136..bd7c549 100644
--- a/java/com/google/gerrit/server/permissions/FailedPermissionBackend.java
+++ b/java/com/google/gerrit/server/permissions/FailedPermissionBackend.java
@@ -16,10 +16,8 @@
 
 import com.google.gerrit.extensions.api.access.GlobalOrPluginPermission;
 import com.google.gerrit.extensions.conditions.BooleanCondition;
-import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.reviewdb.server.ReviewDb;
-import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.notedb.ChangeNotes;
 import com.google.gerrit.server.permissions.PermissionBackend.ForChange;
 import com.google.gerrit.server.permissions.PermissionBackend.ForProject;
@@ -122,16 +120,6 @@
     }
 
     @Override
-    public ForProject user(CurrentUser user) {
-      return this;
-    }
-
-    @Override
-    public ForProject absentUser(Account.Id id) {
-      return this;
-    }
-
-    @Override
     public String resourcePath() {
       throw new UnsupportedOperationException(
           "FailedPermissionBackend is not scoped to a resource");
@@ -181,16 +169,6 @@
     }
 
     @Override
-    public ForRef user(CurrentUser user) {
-      return this;
-    }
-
-    @Override
-    public ForRef absentUser(Account.Id id) {
-      return this;
-    }
-
-    @Override
     public String resourcePath() {
       throw new UnsupportedOperationException(
           "FailedPermissionBackend is not scoped to a resource");
@@ -244,16 +222,6 @@
     }
 
     @Override
-    public ForChange user(CurrentUser user) {
-      return this;
-    }
-
-    @Override
-    public ForChange absentUser(Account.Id id) {
-      return this;
-    }
-
-    @Override
     public String resourcePath() {
       throw new UnsupportedOperationException(
           "FailedPermissionBackend is not scoped to a resource");
diff --git a/java/com/google/gerrit/server/permissions/PermissionBackend.java b/java/com/google/gerrit/server/permissions/PermissionBackend.java
index 0690d6c..4719aa9 100644
--- a/java/com/google/gerrit/server/permissions/PermissionBackend.java
+++ b/java/com/google/gerrit/server/permissions/PermissionBackend.java
@@ -294,12 +294,6 @@
     /** Returns the fully qualified resource path that this instance is scoped to. */
     public abstract String resourcePath();
 
-    /** Returns a new instance rescoped to same project, but different {@code user}. */
-    public abstract ForProject user(CurrentUser user);
-
-    /** @see PermissionBackend#absentUser(Account.Id) */
-    public abstract ForProject absentUser(Account.Id id);
-
     /** Returns an instance scoped for {@code ref} in this project. */
     public abstract ForRef ref(String ref);
 
@@ -400,12 +394,6 @@
     /** Returns a fully qualified resource path that this instance is scoped to. */
     public abstract String resourcePath();
 
-    /** Returns a new instance rescoped to same reference, but different {@code user}. */
-    public abstract ForRef user(CurrentUser user);
-
-    /** @see PermissionBackend#absentUser(Account.Id) */
-    public abstract ForRef absentUser(Account.Id id);
-
     /** Returns an instance scoped to change. */
     public abstract ForChange change(ChangeData cd);
 
@@ -456,12 +444,6 @@
     /** Returns the fully qualified resource path that this instance is scoped to. */
     public abstract String resourcePath();
 
-    /** Returns a new instance rescoped to same change, but different {@code user}. */
-    public abstract ForChange user(CurrentUser user);
-
-    /** @see PermissionBackend#absentUser(Account.Id) */
-    public abstract ForChange absentUser(Account.Id id);
-
     /** Verify scoped user can {@code perm}, throwing if denied. */
     public abstract void check(ChangePermissionOrLabel perm)
         throws AuthException, PermissionBackendException;
diff --git a/java/com/google/gerrit/server/permissions/ProjectControl.java b/java/com/google/gerrit/server/permissions/ProjectControl.java
index ed12a2b..67662c7 100644
--- a/java/com/google/gerrit/server/permissions/ProjectControl.java
+++ b/java/com/google/gerrit/server/permissions/ProjectControl.java
@@ -21,7 +21,6 @@
 import com.google.gerrit.common.data.PermissionRule;
 import com.google.gerrit.extensions.conditions.BooleanCondition;
 import com.google.gerrit.extensions.restapi.AuthException;
-import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.reviewdb.client.AccountGroup;
 import com.google.gerrit.reviewdb.client.Branch;
 import com.google.gerrit.reviewdb.client.Change;
@@ -324,16 +323,6 @@
     private String resourcePath;
 
     @Override
-    public ForProject user(CurrentUser user) {
-      return forUser(user).asForProject().database(db);
-    }
-
-    @Override
-    public ForProject absentUser(Account.Id id) {
-      return user(identifiedUserFactory.create(id));
-    }
-
-    @Override
     public String resourcePath() {
       if (resourcePath == null) {
         resourcePath = "/projects/" + getProjectState().getName();
diff --git a/java/com/google/gerrit/server/permissions/RefControl.java b/java/com/google/gerrit/server/permissions/RefControl.java
index 012d68a..3bd2817 100644
--- a/java/com/google/gerrit/server/permissions/RefControl.java
+++ b/java/com/google/gerrit/server/permissions/RefControl.java
@@ -22,7 +22,6 @@
 import com.google.gerrit.common.data.PermissionRule.Action;
 import com.google.gerrit.extensions.conditions.BooleanCondition;
 import com.google.gerrit.extensions.restapi.AuthException;
-import com.google.gerrit.reviewdb.client.Account;
 import com.google.gerrit.reviewdb.client.Change;
 import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.reviewdb.client.RefNames;
@@ -409,16 +408,6 @@
     private String resourcePath;
 
     @Override
-    public ForRef user(CurrentUser user) {
-      return forUser(user).asForRef().database(db);
-    }
-
-    @Override
-    public ForRef absentUser(Account.Id id) {
-      return user(identifiedUserFactory.create(id));
-    }
-
-    @Override
     public String resourcePath() {
       if (resourcePath == null) {
         resourcePath =
diff --git a/javatests/com/google/gerrit/server/extensions/webui/UiActionsTest.java b/javatests/com/google/gerrit/server/extensions/webui/UiActionsTest.java
index f63b181..08d7082 100644
--- a/javatests/com/google/gerrit/server/extensions/webui/UiActionsTest.java
+++ b/javatests/com/google/gerrit/server/extensions/webui/UiActionsTest.java
@@ -49,16 +49,6 @@
     }
 
     @Override
-    public ForProject user(CurrentUser user) {
-      throw new UnsupportedOperationException("not implemented");
-    }
-
-    @Override
-    public ForProject absentUser(Account.Id id) {
-      throw new UnsupportedOperationException("not implemented");
-    }
-
-    @Override
     public ForRef ref(String ref) {
       throw new UnsupportedOperationException("not implemented");
     }