Backport of 54385-board-policy

This commit is contained in:
Mario de la Ossa 2019-01-17 11:40:37 -06:00
parent c46b8e968b
commit 54994762ff
No known key found for this signature in database
GPG Key ID: 20CA8F4C6A20761B
4 changed files with 22 additions and 19 deletions

View File

@ -34,15 +34,11 @@ module BoardsResponses
end
def authorize_read_list
ability = board.group_board? ? :read_group : :read_list
authorize_action_for!(board.parent, ability)
authorize_action_for!(board, :read_list)
end
def authorize_read_issue
ability = board.group_board? ? :read_group : :read_issue
authorize_action_for!(board.parent, ability)
authorize_action_for!(board, :read_issue)
end
def authorize_update_issue
@ -57,7 +53,7 @@ module BoardsResponses
end
def authorize_admin_list
authorize_action_for!(board.parent, :admin_list)
authorize_action_for!(board, :admin_list)
end
def authorize_action_for!(resource, ability)

View File

@ -0,0 +1,14 @@
# frozen_string_literal: true
class BoardPolicy < BasePolicy
delegate { @subject.parent }
condition(:is_group_board) { @subject.group_board? }
rule { is_group_board ? can?(:read_group) : can?(:read_project) }.enable :read_parent
rule { is_group_board & can?(:read_group) }.policy do
enable :read_milestone
enable :read_issue
end
end

View File

@ -1,7 +1,7 @@
require 'spec_helper'
describe Boards::IssuesController do
let(:project) { create(:project) }
let(:project) { create(:project, :private) }
let(:board) { create(:board, project: project) }
let(:user) { create(:user) }
let(:guest) { create(:user) }
@ -127,14 +127,10 @@ describe Boards::IssuesController do
end
context 'with unauthorized user' do
before do
allow(Ability).to receive(:allowed?).and_call_original
allow(Ability).to receive(:allowed?).with(user, :read_project, project).and_return(true)
allow(Ability).to receive(:allowed?).with(user, :read_issue, project).and_return(false)
end
let(:unauth_user) { create(:user) }
it 'returns a forbidden 403 response' do
list_issues user: user, board: board, list: list2
list_issues user: unauth_user, board: board, list: list2
expect(response).to have_gitlab_http_status(403)
end

View File

@ -31,13 +31,10 @@ describe Boards::ListsController do
end
context 'with unauthorized user' do
before do
allow(Ability).to receive(:allowed?).with(user, :read_project, project).and_return(true)
allow(Ability).to receive(:allowed?).with(user, :read_list, project).and_return(false)
end
let(:unauth_user) { create(:user) }
it 'returns a forbidden 403 response' do
read_board_list user: user, board: board
read_board_list user: unauth_user, board: board
expect(response).to have_gitlab_http_status(403)
end