From 54db08f2f367e8b1e2100adf6496f3589f77d920 Mon Sep 17 00:00:00 2001 From: Heinrich Lee Yu Date: Wed, 24 Oct 2018 14:01:43 +0800 Subject: [PATCH 1/6] Fix project selector to show only projects with issues --- app/assets/javascripts/boards/components/project_select.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/assets/javascripts/boards/components/project_select.vue b/app/assets/javascripts/boards/components/project_select.vue index 4e8fe16160a..427a0868b0c 100644 --- a/app/assets/javascripts/boards/components/project_select.vue +++ b/app/assets/javascripts/boards/components/project_select.vue @@ -46,7 +46,7 @@ export default { selectable: true, data: (term, callback) => { this.loading = true; - return Api.groupProjects(this.groupId, term, {}, projects => { + return Api.groupProjects(this.groupId, term, {with_issues_enabled: true}, projects => { this.loading = false; callback(projects); }); From 11ba5ccd54c04aacbdb6785500875cabf84e1a0c Mon Sep 17 00:00:00 2001 From: Heinrich Lee Yu Date: Wed, 24 Oct 2018 14:02:22 +0800 Subject: [PATCH 2/6] Always show new issue in Open list --- .../shared/boards/components/_board.html.haml | 15 +++++++-------- spec/features/boards/new_issue_spec.rb | 10 ++++++++-- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/app/views/shared/boards/components/_board.html.haml b/app/views/shared/boards/components/_board.html.haml index e26f5260e5b..b79a1b17154 100644 --- a/app/views/shared/boards/components/_board.html.haml +++ b/app/views/shared/boards/components/_board.html.haml @@ -39,14 +39,13 @@ {{ list.issuesSize }} = render_if_exists "shared/boards/components/list_weight" - - if can?(current_user, :admin_list, current_board_parent) - %button.issue-count-badge-add-button.btn.btn-sm.btn-default.ml-1.has-tooltip.js-no-trigger-collapse{ type: "button", - "@click" => "showNewIssueForm", - "v-if" => 'list.type !== "closed"', - "aria-label" => _("New issue"), - "title" => _("New issue"), - data: { placement: "top", container: "body" } } - = icon("plus", class: "js-no-trigger-collapse") + %button.issue-count-badge-add-button.btn.btn-sm.btn-default.ml-1.has-tooltip.js-no-trigger-collapse{ type: "button", + "@click" => "showNewIssueForm", + "v-if" => 'list.type == "backlog" || (!disabled && list.type !== "closed")', + "aria-label" => _("New issue"), + "title" => _("New issue"), + data: { placement: "top", container: "body" } } + = icon("plus", class: "js-no-trigger-collapse") %board-list{ "v-if" => 'list.type !== "blank" && list.type !== "promotion"', ":list" => "list", diff --git a/spec/features/boards/new_issue_spec.rb b/spec/features/boards/new_issue_spec.rb index 0bf1ecbc433..164442a47f5 100644 --- a/spec/features/boards/new_issue_spec.rb +++ b/spec/features/boards/new_issue_spec.rb @@ -94,8 +94,14 @@ describe 'Issue Boards new issue', :js do wait_for_requests end - it 'does not display new issue button' do - expect(page).to have_selector('.issue-count-badge-add-button', count: 0) + it 'displays new issue button in open list' do + expect(first('.board')).to have_selector('.issue-count-badge-add-button', count: 1) + end + + it 'does not display new issue button in label list' do + page.within('.board:nth-child(2)') do + expect(page).not_to have_selector('.issue-count-badge-add-button') + end end end end From 5b27e2dbda5f35a7d2fca0462349ddbad67bd04c Mon Sep 17 00:00:00 2001 From: Heinrich Lee Yu Date: Wed, 24 Oct 2018 16:29:10 +0800 Subject: [PATCH 3/6] Add changelog entry --- .../unreleased/52545-guest-create-issue-in-group-board.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 changelogs/unreleased/52545-guest-create-issue-in-group-board.yml diff --git a/changelogs/unreleased/52545-guest-create-issue-in-group-board.yml b/changelogs/unreleased/52545-guest-create-issue-in-group-board.yml new file mode 100644 index 00000000000..5701e44eb32 --- /dev/null +++ b/changelogs/unreleased/52545-guest-create-issue-in-group-board.yml @@ -0,0 +1,5 @@ +--- +title: Always show new issue button in boards' Open list +merge_request: 22557 +author: Heinrich Lee Yu +type: fixed From 6dda85927d88461506e7255f5ba49bdeac33699e Mon Sep 17 00:00:00 2001 From: Heinrich Lee Yu Date: Wed, 24 Oct 2018 17:58:34 +0800 Subject: [PATCH 4/6] Update boards issue creation authorization --- app/controllers/concerns/boards_responses.rb | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/controllers/concerns/boards_responses.rb b/app/controllers/concerns/boards_responses.rb index b7e4f9b81f1..e6c54e688b6 100644 --- a/app/controllers/concerns/boards_responses.rb +++ b/app/controllers/concerns/boards_responses.rb @@ -50,7 +50,14 @@ module BoardsResponses end def authorize_create_issue - authorize_action_for!(project, :admin_issue) + board = board_parent.boards.find(issue_params[:board_id]) + list = board.lists.find(issue_params[:list_id]) + + if list.backlog? + authorize_action_for!(project, :create_issue) + else + authorize_action_for!(project, :admin_issue) + end end def authorize_admin_list From 2ba71571de1147e6b5e6e6f8c14b05d07c6050c2 Mon Sep 17 00:00:00 2001 From: Heinrich Lee Yu Date: Thu, 25 Oct 2018 11:38:02 +0800 Subject: [PATCH 5/6] Simplify query and add tests for authorization change --- app/controllers/concerns/boards_responses.rb | 10 +++------- .../boards/issues_controller_spec.rb | 19 +++++++++++++++---- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/app/controllers/concerns/boards_responses.rb b/app/controllers/concerns/boards_responses.rb index e6c54e688b6..3cdf4ddf8bb 100644 --- a/app/controllers/concerns/boards_responses.rb +++ b/app/controllers/concerns/boards_responses.rb @@ -50,14 +50,10 @@ module BoardsResponses end def authorize_create_issue - board = board_parent.boards.find(issue_params[:board_id]) - list = board.lists.find(issue_params[:list_id]) + list = List.find(issue_params[:list_id]) + action = list.backlog? ? :create_issue : :admin_issue - if list.backlog? - authorize_action_for!(project, :create_issue) - else - authorize_action_for!(project, :admin_issue) - end + authorize_action_for!(project, action) end def authorize_admin_list diff --git a/spec/controllers/boards/issues_controller_spec.rb b/spec/controllers/boards/issues_controller_spec.rb index c365988a100..98946e4287b 100644 --- a/spec/controllers/boards/issues_controller_spec.rb +++ b/spec/controllers/boards/issues_controller_spec.rb @@ -208,11 +208,22 @@ describe Boards::IssuesController do end end - context 'with unauthorized user' do - it 'returns a forbidden 403 response' do - create_issue user: guest, board: board, list: list1, title: 'New issue' + context 'with guest user' do + context 'in open list' do + it 'returns a successful 200 response' do + open_list = board.lists.create(list_type: :backlog) + create_issue user: guest, board: board, list: open_list, title: 'New issue' - expect(response).to have_gitlab_http_status(403) + expect(response).to have_gitlab_http_status(200) + end + end + + context 'in label list' do + it 'returns a forbidden 403 response' do + create_issue user: guest, board: board, list: list1, title: 'New issue' + + expect(response).to have_gitlab_http_status(403) + end end end From fdb46c55ee52542c6147f24363087185891e0703 Mon Sep 17 00:00:00 2001 From: Heinrich Lee Yu Date: Fri, 26 Oct 2018 10:24:30 +0800 Subject: [PATCH 6/6] Extract complex condition to computed prop --- app/assets/javascripts/boards/components/board.js | 3 +++ app/views/shared/boards/components/_board.html.haml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/boards/components/board.js b/app/assets/javascripts/boards/components/board.js index 75477ebb3b3..623cda5679a 100644 --- a/app/assets/javascripts/boards/components/board.js +++ b/app/assets/javascripts/boards/components/board.js @@ -53,6 +53,9 @@ export default Vue.extend({ const { issuesSize } = this.list; return `${n__('%d issue', '%d issues', issuesSize)}`; }, + isNewIssueShown() { + return this.list.type === 'backlog' || (!this.disabled && this.list.type !== 'closed'); + } }, watch: { filter: { diff --git a/app/views/shared/boards/components/_board.html.haml b/app/views/shared/boards/components/_board.html.haml index b79a1b17154..c6c5cadc3f5 100644 --- a/app/views/shared/boards/components/_board.html.haml +++ b/app/views/shared/boards/components/_board.html.haml @@ -41,7 +41,7 @@ %button.issue-count-badge-add-button.btn.btn-sm.btn-default.ml-1.has-tooltip.js-no-trigger-collapse{ type: "button", "@click" => "showNewIssueForm", - "v-if" => 'list.type == "backlog" || (!disabled && list.type !== "closed")', + "v-if" => "isNewIssueShown", "aria-label" => _("New issue"), "title" => _("New issue"), data: { placement: "top", container: "body" } }