diff --git a/src/main/java/com/googlesource/gerrit/plugins/lfs/LfsApiServlet.java b/src/main/java/com/googlesource/gerrit/plugins/lfs/LfsApiServlet.java
index dfb5941..c470616 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/lfs/LfsApiServlet.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/lfs/LfsApiServlet.java
@@ -53,8 +53,6 @@
   private static final Logger log = LoggerFactory.getLogger(LfsApiServlet.class);
   private static final long serialVersionUID = 1L;
   private static final Pattern URL_PATTERN = Pattern.compile(LFS_OBJECTS_REGEX_REST);
-  private static final String DOWNLOAD = "download";
-  private static final String UPLOAD = "upload";
 
   private final ProjectCache projectCache;
   private final PermissionBackend permissionBackend;
@@ -90,12 +88,9 @@
     if (state == null || state.getProject().getState() == HIDDEN) {
       throw new LfsRepositoryNotFound(project.get());
     }
-    authorizeUser(
-        userProvider.getUser(auth, projName, request.getOperation()),
-        state,
-        request.getOperation());
+    authorizeUser(userProvider.getUser(auth, projName, request.getOperation()), state, request);
 
-    if (request.getOperation().equals(UPLOAD) && state.getProject().getState() == READ_ONLY) {
+    if (request.isUpload() && state.getProject().getState() == READ_ONLY) {
       throw new LfsRepositoryReadOnly(project.get());
     }
 
@@ -104,7 +99,7 @@
     // No config means we default to "not enabled".
     if (config != null && config.isEnabled()) {
       // For uploads, check object sizes against limit if configured
-      if (request.getOperation().equals(UPLOAD)) {
+      if (request.isUpload()) {
         if (config.isReadOnly()) {
           throw new LfsRepositoryReadOnly(project.get());
         }
@@ -128,16 +123,16 @@
     throw new LfsUnavailable(project.get());
   }
 
-  private void authorizeUser(CurrentUser user, ProjectState state, String operation)
+  private void authorizeUser(CurrentUser user, ProjectState state, LfsRequest request)
       throws LfsUnauthorized {
     ProjectControl control = state.controlFor(user);
-    if ((operation.equals(DOWNLOAD)
+    if ((request.isDownload()
             && !permissionBackend
                 .user(user)
                 .project(state.getProject().getNameKey())
                 .testOrFalse(ACCESS))
-        || (operation.equals(UPLOAD) && Capable.OK != control.canPushToAtLeastOneRef())) {
-      String op = operation.toLowerCase();
+        || (request.isUpload() && Capable.OK != control.canPushToAtLeastOneRef())) {
+      String op = request.getOperation().toLowerCase();
       String project = state.getProject().getName();
       String userName =
           Strings.isNullOrEmpty(user.getUserName()) ? "anonymous" : user.getUserName();
