Adapt code to permission backend

Bug: Issue 8756
Change-Id: I85be123b204358855fec887b0b377f8fc4f857e9
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserModel.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserModel.java
index 7cd83ac..5588fab 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserModel.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserModel.java
@@ -22,9 +22,13 @@
 import com.gitblit.utils.StringUtils;
 import com.google.gerrit.extensions.client.ProjectState;
 import com.google.gerrit.reviewdb.client.Project.NameKey;
+import com.google.gerrit.server.CurrentUser;
+import com.google.gerrit.server.permissions.PermissionBackend;
+import com.google.gerrit.server.permissions.ProjectPermission;
 import com.google.gerrit.server.project.NoSuchProjectException;
 import com.google.gerrit.server.project.ProjectControl;
 import com.google.gerrit.server.project.ProjectControl.Factory;
+import com.google.inject.Provider;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -46,24 +50,34 @@
   public final Set<TeamModel> teams = new HashSet<TeamModel>();
 
   private final transient ProjectControl.Factory projectControlFactory;
+  private final transient Provider<CurrentUser> userProvider;
+  private final transient PermissionBackend permissionBackend;
 
   // non-persisted fields
   public boolean isAuthenticated;
 
   public GerritToGitBlitUserModel(String username) {
-    this(username, null);
+    this(username, null, null, null);
   }
 
-  public GerritToGitBlitUserModel(String username, ProjectControl.Factory projectControlFactory) {
+  public GerritToGitBlitUserModel(
+      String username,
+      ProjectControl.Factory projectControlFactory,
+      Provider<CurrentUser> userProvider,
+      PermissionBackend persmissionBackend) {
     super(username);
     this.username = username;
     this.isAuthenticated = true;
     this.projectControlFactory = projectControlFactory;
+    this.userProvider = userProvider;
+    this.permissionBackend = persmissionBackend;
   }
 
   public GerritToGitBlitUserModel(ProjectControl.Factory projectControlFactory) {
     super(ANONYMOUS_USER);
     this.projectControlFactory = projectControlFactory;
+    this.userProvider = null;
+    this.permissionBackend = null;
   }
 
   @Deprecated
@@ -88,8 +102,8 @@
     boolean result = false;
 
     try {
-      ProjectControl control =
-          projectControlFactory.controlFor(new NameKey(getRepositoryName(repository.name)));
+      NameKey project = new NameKey(getRepositoryName(repository.name));
+      ProjectControl control = projectControlFactory.controlFor(project);
 
       if (control == null) {
         return false;
@@ -99,9 +113,15 @@
         case VIEW:
           return !control.getProject().getState().equals(ProjectState.HIDDEN);
         case CLONE:
-          return control.canRunUploadPack();
+          return permissionBackend
+              .user(userProvider)
+              .project(project)
+              .testOrFalse(ProjectPermission.RUN_UPLOAD_PACK);
         case PUSH:
-          return control.canRunReceivePack();
+          permissionBackend
+              .user(userProvider)
+              .project(project)
+              .testOrFalse(ProjectPermission.RUN_RECEIVE_PACK);
         default:
           return true;
       }
@@ -199,6 +219,6 @@
   }
 
   public static UserModel getAnonymous(Factory projectControl) {
-    return new GerritToGitBlitUserModel(ANONYMOUS_USER, projectControl);
+    return new GerritToGitBlitUserModel(ANONYMOUS_USER, projectControl, null, null);
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserService.java b/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserService.java
index 5cc3afa..21bd512 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserService.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitblit/auth/GerritToGitBlitUserService.java
@@ -27,11 +27,14 @@
 import com.google.common.base.Strings;
 import com.google.gerrit.extensions.registration.DynamicItem;
 import com.google.gerrit.httpd.WebSession;
+import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.account.AccountManager;
 import com.google.gerrit.server.account.AuthRequest;
 import com.google.gerrit.server.account.AuthResult;
+import com.google.gerrit.server.permissions.PermissionBackend;
 import com.google.gerrit.server.project.ProjectControl;
 import com.google.inject.Inject;
+import com.google.inject.Provider;
 import com.google.inject.Singleton;
 import java.util.Collection;
 import java.util.Collections;
@@ -45,6 +48,8 @@
 public class GerritToGitBlitUserService implements IAuthenticationManager, IUserManager {
   private static final Logger log = LoggerFactory.getLogger(GerritToGitBlitUserService.class);
 
+  private final Provider<CurrentUser> userProvider;
+  private final PermissionBackend permissionBackend;
   private final ProjectControl.Factory projectControl;
   private final AccountManager accountManager;
   private final DynamicItem<WebSession> webSession;
@@ -53,9 +58,13 @@
 
   @Inject
   public GerritToGitBlitUserService(
+      Provider<CurrentUser> userProvider,
+      PermissionBackend permissionBackend,
       ProjectControl.Factory projectControl,
       AccountManager accountManager,
       DynamicItem<WebSession> webSession) {
+    this.userProvider = userProvider;
+    this.permissionBackend = permissionBackend;
     this.projectControl = projectControl;
     this.accountManager = accountManager;
     this.webSession = webSession;
@@ -93,7 +102,7 @@
       return null;
     }
 
-    return new GerritToGitBlitUserModel(username, projectControl);
+    return new GerritToGitBlitUserModel(username, projectControl, userProvider, permissionBackend);
   }
 
   public UserModel authenticateBasicAuth(String username, String password) {
@@ -113,7 +122,7 @@
       return null;
     }
 
-    return new GerritToGitBlitUserModel(username, projectControl);
+    return new GerritToGitBlitUserModel(username, projectControl, userProvider, permissionBackend);
   }
 
   @Override
@@ -211,7 +220,7 @@
 
   @Override
   public UserModel getUserModel(String username) {
-    return new GerritToGitBlitUserModel(username, projectControl);
+    return new GerritToGitBlitUserModel(username, projectControl, userProvider, permissionBackend);
   }
 
   @Override