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
