diff --git a/app/assets/javascripts/repository/components/blob_content_viewer.vue b/app/assets/javascripts/repository/components/blob_content_viewer.vue
index ba5024588a84e4169c2178620e4fd4786a8a3210..462cf77a2783de81c50b8cf62320e5f86c6e7e30 100644
--- a/app/assets/javascripts/repository/components/blob_content_viewer.vue
+++ b/app/assets/javascripts/repository/components/blob_content_viewer.vue
@@ -65,6 +65,9 @@ export default {
       isLoadingLegacyViewer: false,
       activeViewerType: SIMPLE_BLOB_VIEWER,
       project: {
+        userPermissions: {
+          pushCode: false,
+        },
         repository: {
           blobs: {
             nodes: [
@@ -86,7 +89,6 @@ export default {
                 canLock: false,
                 isLocked: false,
                 lockLink: '',
-                canModifyBlob: true,
                 forkPath: '',
                 simpleViewer: {},
                 richViewer: null,
@@ -168,7 +170,7 @@ export default {
             :path="path"
             :name="blobInfo.name"
             :replace-path="blobInfo.replacePath"
-            :can-push-code="blobInfo.canModifyBlob"
+            :can-push-code="project.userPermissions.pushCode"
           />
         </template>
       </blob-header>
diff --git a/app/assets/javascripts/repository/queries/blob_info.query.graphql b/app/assets/javascripts/repository/queries/blob_info.query.graphql
index bfd9447d2601e653420d2c1aeb2b7fbe0fca6833..1889f2269f593844f2abc6ea9fa0653c6b4582eb 100644
--- a/app/assets/javascripts/repository/queries/blob_info.query.graphql
+++ b/app/assets/javascripts/repository/queries/blob_info.query.graphql
@@ -1,5 +1,8 @@
 query getBlobInfo($projectPath: ID!, $filePath: String!) {
   project(fullPath: $projectPath) {
+    userPermissions {
+      pushCode
+    }
     repository {
       blobs(paths: [$filePath]) {
         nodes {
@@ -15,7 +18,6 @@ query getBlobInfo($projectPath: ID!, $filePath: String!) {
           storedExternally
           rawPath
           replacePath
-          canModifyBlob
           simpleViewer {
             fileType
             tooLarge
diff --git a/spec/frontend/repository/components/blob_content_viewer_spec.js b/spec/frontend/repository/components/blob_content_viewer_spec.js
index 575a53ffd2b3c9561323a72f975f136fe3b981d3..1c224a1430ebbbdad2d7039aa65a3e1a5638624c 100644
--- a/spec/frontend/repository/components/blob_content_viewer_spec.js
+++ b/spec/frontend/repository/components/blob_content_viewer_spec.js
@@ -37,7 +37,6 @@ const simpleMockData = {
   canLock: true,
   isLocked: false,
   lockLink: 'some_file.js/lock',
-  canModifyBlob: true,
   forkPath: 'some_file.js/fork',
   simpleViewer: {
     fileType: 'text',
@@ -56,16 +55,26 @@ const richMockData = {
     renderError: null,
   },
 };
+const userPermissionsMockData = {
+  userPermissions: {
+    pushCode: true,
+  },
+};
 
 const localVue = createLocalVue();
 const mockAxios = new MockAdapter(axios);
 
-const createComponentWithApollo = (mockData) => {
+const createComponentWithApollo = (mockData, mockPermissionData = true) => {
   localVue.use(VueApollo);
 
-  const mockResolver = jest
-    .fn()
-    .mockResolvedValue({ data: { project: { repository: { blobs: { nodes: [mockData] } } } } });
+  const mockResolver = jest.fn().mockResolvedValue({
+    data: {
+      project: {
+        userPermissions: { pushCode: mockPermissionData },
+        repository: { blobs: { nodes: [mockData] } },
+      },
+    },
+  });
 
   const fakeApollo = createMockApollo([[blobInfoQuery, mockResolver]]);
 
@@ -276,13 +285,16 @@ describe('Blob content viewer component', () => {
     });
 
     describe('BlobButtonGroup', () => {
-      const { name, path } = simpleMockData;
+      const { name, path, replacePath } = simpleMockData;
+      const {
+        userPermissions: { pushCode },
+      } = userPermissionsMockData;
 
       it('renders component', async () => {
         window.gon.current_user_id = 1;
 
         fullFactory({
-          mockData: { blobInfo: simpleMockData },
+          mockData: { blobInfo: simpleMockData, project: userPermissionsMockData },
           stubs: {
             BlobContent: true,
             BlobButtonGroup: true,
@@ -294,6 +306,8 @@ describe('Blob content viewer component', () => {
         expect(findBlobButtonGroup().props()).toMatchObject({
           name,
           path,
+          replacePath,
+          canPushCode: pushCode,
         });
       });