From bb332210b9c784e171263fa397a01fda78308152 Mon Sep 17 00:00:00 2001
From: Rajan Mistry <rmistry@gitlab.com>
Date: Tue, 11 Apr 2023 17:26:19 +0530
Subject: [PATCH] Add admin_parent_link permission to hide Add button in issue

Add admin_parent_link permission to hide Add button in issue if
user has Guest role.

Changelog: fixed
---
 app/graphql/types/permission_types/work_item.rb       | 3 ++-
 doc/api/graphql/reference/index.md                    | 1 +
 spec/graphql/types/permission_types/work_item_spec.rb | 3 ++-
 spec/requests/api/graphql/work_item_spec.rb           | 3 ++-
 4 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/app/graphql/types/permission_types/work_item.rb b/app/graphql/types/permission_types/work_item.rb
index f35f42001e0768..9f8f9e4f2b9275 100644
--- a/app/graphql/types/permission_types/work_item.rb
+++ b/app/graphql/types/permission_types/work_item.rb
@@ -6,7 +6,8 @@ class WorkItem < BasePermissionType
       graphql_name 'WorkItemPermissions'
       description 'Check permissions for the current user on a work item'
 
-      abilities :read_work_item, :update_work_item, :delete_work_item, :admin_work_item
+      abilities :read_work_item, :update_work_item, :delete_work_item,
+        :admin_work_item, :admin_parent_link
     end
   end
 end
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index 2e945f5ba6655c..2dd866c9261c65 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -22474,6 +22474,7 @@ Check permissions for the current user on a work item.
 
 | Name | Type | Description |
 | ---- | ---- | ----------- |
+| <a id="workitempermissionsadminparentlink"></a>`adminParentLink` | [`Boolean!`](#boolean) | Indicates the user can perform `admin_parent_link` on this resource. |
 | <a id="workitempermissionsadminworkitem"></a>`adminWorkItem` | [`Boolean!`](#boolean) | Indicates the user can perform `admin_work_item` on this resource. |
 | <a id="workitempermissionsdeleteworkitem"></a>`deleteWorkItem` | [`Boolean!`](#boolean) | Indicates the user can perform `delete_work_item` on this resource. |
 | <a id="workitempermissionsreadworkitem"></a>`readWorkItem` | [`Boolean!`](#boolean) | Indicates the user can perform `read_work_item` on this resource. |
diff --git a/spec/graphql/types/permission_types/work_item_spec.rb b/spec/graphql/types/permission_types/work_item_spec.rb
index db6d78b15385cc..72e9dad3bea018 100644
--- a/spec/graphql/types/permission_types/work_item_spec.rb
+++ b/spec/graphql/types/permission_types/work_item_spec.rb
@@ -5,7 +5,8 @@
 RSpec.describe Types::PermissionTypes::WorkItem do
   it do
     expected_permissions = [
-      :read_work_item, :update_work_item, :delete_work_item, :admin_work_item
+      :read_work_item, :update_work_item, :delete_work_item, :admin_work_item,
+      :admin_parent_link
     ]
 
     expected_permissions.each do |permission|
diff --git a/spec/requests/api/graphql/work_item_spec.rb b/spec/requests/api/graphql/work_item_spec.rb
index fe6f75548a55c9..8afec74a6b7986 100644
--- a/spec/requests/api/graphql/work_item_spec.rb
+++ b/spec/requests/api/graphql/work_item_spec.rb
@@ -59,7 +59,8 @@
           'readWorkItem' => true,
           'updateWorkItem' => true,
           'deleteWorkItem' => false,
-          'adminWorkItem' => true
+          'adminWorkItem' => true,
+          'adminParentLink' => true
         },
         'project' => hash_including('id' => project.to_gid.to_s, 'fullPath' => project.full_path)
       )
-- 
GitLab