Skip to content
代码片段 群组 项目
未验证 提交 8355c50f 编辑于 作者: Max Fan's avatar Max Fan 提交者: GitLab
浏览文件

Merge branch 'add-default-permissions-argument-to-job-token-policies-mutations' into 'master'

Add default permissions argument to job token policies mutations

See merge request https://gitlab.com/gitlab-org/gitlab/-/merge_requests/175382



Merged-by: default avatarMax Fan <mfan@gitlab.com>
Approved-by: default avatarAlex Buijs <abuijs@gitlab.com>
Approved-by: default avatarMax Fan <mfan@gitlab.com>
Reviewed-by: default avatarAlex Buijs <abuijs@gitlab.com>
Reviewed-by: default avatarHinam Mehra <hmehra@gitlab.com>
Reviewed-by: default avatarMax Fan <mfan@gitlab.com>
Co-authored-by: default avatarDaniel Tian <dtian@gitlab.com>
No related branches found
No related tags found
无相关合并请求
显示
83 个添加45 个删除
...@@ -18,6 +18,13 @@ class AddGroupOrProject < BaseMutation ...@@ -18,6 +18,13 @@ class AddGroupOrProject < BaseMutation
required: true, required: true,
description: 'Group or project to be added to the CI job token scope.' description: 'Group or project to be added to the CI job token scope.'
argument :default_permissions, GraphQL::Types::Boolean,
required: false,
default_value: true,
experiment: { milestone: '17.8' },
description: 'Indicates whether default permissions are enabled (true) or fine-grained permissions are ' \
'enabled (false).'
argument :job_token_policies, [Types::Ci::JobTokenScope::PoliciesEnum], argument :job_token_policies, [Types::Ci::JobTokenScope::PoliciesEnum],
required: false, required: false,
default_value: [], default_value: [],
...@@ -36,16 +43,16 @@ class AddGroupOrProject < BaseMutation ...@@ -36,16 +43,16 @@ class AddGroupOrProject < BaseMutation
null: true, null: true,
description: "CI job token's access scope." description: "CI job token's access scope."
def resolve(args) def resolve(project_path:, target_path:, default_permissions:, job_token_policies:)
project = authorized_find!(args[:project_path]) project = authorized_find!(project_path)
target = find_target_path(target_path)
target = find_target_path(args[:target_path]) policies_enabled = Feature.enabled?(:add_policies_to_ci_job_token, project)
# Use default permissions if policies feature isn't enabled.
args.delete(:job_token_policies) unless Feature.enabled?(:add_policies_to_ci_job_token, project) default = policies_enabled ? default_permissions : true
result = ::Ci::JobTokenScope::AddGroupOrProjectService result = ::Ci::JobTokenScope::AddGroupOrProjectService
.new(project, current_user) .new(project, current_user)
.execute(target, policies: args[:job_token_policies]) .execute(target, default_permissions: default, policies: job_token_policies)
if result.success? if result.success?
{ {
......
...@@ -18,6 +18,11 @@ class UpdateJobTokenPolicies < BaseMutation ...@@ -18,6 +18,11 @@ class UpdateJobTokenPolicies < BaseMutation
required: true, required: true,
description: 'Group or project that the CI job token targets.' description: 'Group or project that the CI job token targets.'
argument :default_permissions, GraphQL::Types::Boolean,
required: true,
description: 'Indicates whether default permissions are enabled (true) or fine-grained permissions are ' \
'enabled (false).'
argument :job_token_policies, [Types::Ci::JobTokenScope::PoliciesEnum], argument :job_token_policies, [Types::Ci::JobTokenScope::PoliciesEnum],
required: true, required: true,
description: 'List of policies added to the CI job token scope.' description: 'List of policies added to the CI job token scope.'
...@@ -28,7 +33,7 @@ class UpdateJobTokenPolicies < BaseMutation ...@@ -28,7 +33,7 @@ class UpdateJobTokenPolicies < BaseMutation
experiment: { milestone: '17.6' }, experiment: { milestone: '17.6' },
description: "Allowlist entry for the CI job token's access scope." description: "Allowlist entry for the CI job token's access scope."
def resolve(project_path:, target_path:, job_token_policies:) def resolve(project_path:, target_path:, default_permissions:, job_token_policies:)
project = authorized_find!(project_path) project = authorized_find!(project_path)
target = find_target_using_path(target_path) target = find_target_using_path(target_path)
...@@ -38,7 +43,7 @@ def resolve(project_path:, target_path:, job_token_policies:) ...@@ -38,7 +43,7 @@ def resolve(project_path:, target_path:, job_token_policies:)
result = ::Ci::JobTokenScope::UpdatePoliciesService result = ::Ci::JobTokenScope::UpdatePoliciesService
.new(project, current_user) .new(project, current_user)
.execute(target, job_token_policies) .execute(target, default_permissions, job_token_policies)
if result.success? if result.success?
{ {
......
...@@ -25,6 +25,11 @@ class AllowlistEntryType < BaseObject ...@@ -25,6 +25,11 @@ class AllowlistEntryType < BaseObject
null: true, null: true,
description: 'Direction of access. Defaults to INBOUND.' description: 'Direction of access. Defaults to INBOUND.'
field :default_permissions,
GraphQL::Types::Boolean,
description: 'Indicates whether default permissions are enabled (true) or fine-grained permissions are ' \
'enabled (false).'
field :job_token_policies, field :job_token_policies,
[Types::Ci::JobTokenScope::PoliciesEnum], [Types::Ci::JobTokenScope::PoliciesEnum],
null: true, null: true,
...@@ -63,6 +68,10 @@ def direction ...@@ -63,6 +68,10 @@ def direction
end end
end end
def default_permissions
Feature.enabled?(:add_policies_to_ci_job_token, object.source_project) ? object.default_permissions : true
end
def job_token_policies def job_token_policies
return unless Feature.enabled?(:add_policies_to_ci_job_token, object.source_project) return unless Feature.enabled?(:add_policies_to_ci_job_token, object.source_project)
......
...@@ -30,25 +30,29 @@ def groups ...@@ -30,25 +30,29 @@ def groups
::Group.id_in(group_links.pluck(:target_group_id)) ::Group.id_in(group_links.pluck(:target_group_id))
end end
def add!(target_project, user:, policies: []) def add!(target_project, user:, default_permissions: true, policies: [])
job_token_policies = add_policies_to_ci_job_token_enabled ? policies : [] job_token_policies = add_policies_to_ci_job_token_enabled ? policies : []
default_permissions = add_policies_to_ci_job_token_enabled ? default_permissions : true
Ci::JobToken::ProjectScopeLink.create!( Ci::JobToken::ProjectScopeLink.create!(
source_project: @source_project, source_project: @source_project,
direction: @direction, direction: @direction,
target_project: target_project, target_project: target_project,
added_by: user, added_by: user,
default_permissions: default_permissions,
job_token_policies: job_token_policies job_token_policies: job_token_policies
) )
end end
def add_group!(target_group, user:, policies: []) def add_group!(target_group, user:, default_permissions: true, policies: [])
job_token_policies = add_policies_to_ci_job_token_enabled ? policies : [] job_token_policies = add_policies_to_ci_job_token_enabled ? policies : []
default_permissions = add_policies_to_ci_job_token_enabled ? default_permissions : true
Ci::JobToken::GroupScopeLink.create!( Ci::JobToken::GroupScopeLink.create!(
source_project: @source_project, source_project: @source_project,
target_group: target_group, target_group: target_group,
added_by: user, added_by: user,
default_permissions: default_permissions,
job_token_policies: job_token_policies job_token_policies: job_token_policies
) )
end end
......
...@@ -5,13 +5,15 @@ module JobTokenScope ...@@ -5,13 +5,15 @@ module JobTokenScope
class AddGroupOrProjectService < ::BaseService class AddGroupOrProjectService < ::BaseService
include EditScopeValidations include EditScopeValidations
def execute(target, policies: []) def execute(target, default_permissions: true, policies: [])
validate_target_exists!(target) validate_target_exists!(target)
if target.is_a?(::Group) if target.is_a?(::Group)
::Ci::JobTokenScope::AddGroupService.new(project, current_user).execute(target, policies: policies) ::Ci::JobTokenScope::AddGroupService.new(project, current_user).execute(target,
default_permissions: default_permissions, policies: policies)
else else
::Ci::JobTokenScope::AddProjectService.new(project, current_user).execute(target, policies: policies) ::Ci::JobTokenScope::AddProjectService.new(project, current_user).execute(target,
default_permissions: default_permissions, policies: policies)
end end
rescue EditScopeValidations::NotFoundError => e rescue EditScopeValidations::NotFoundError => e
......
...@@ -5,11 +5,11 @@ module JobTokenScope ...@@ -5,11 +5,11 @@ module JobTokenScope
class AddGroupService < ::BaseService class AddGroupService < ::BaseService
include EditScopeValidations include EditScopeValidations
def execute(target_group, policies: []) def execute(target_group, default_permissions: true, policies: [])
validate_source_project_and_target_group_access!(project, target_group, current_user) validate_source_project_and_target_group_access!(project, target_group, current_user)
link = allowlist link = allowlist
.add_group!(target_group, policies: policies, user: current_user) .add_group!(target_group, default_permissions: default_permissions, policies: policies, user: current_user)
ServiceResponse.success(payload: { group_link: link }) ServiceResponse.success(payload: { group_link: link })
......
...@@ -5,11 +5,11 @@ module JobTokenScope ...@@ -5,11 +5,11 @@ module JobTokenScope
class AddProjectService < ::BaseService class AddProjectService < ::BaseService
include EditScopeValidations include EditScopeValidations
def execute(target_project, policies: [], direction: :inbound) def execute(target_project, default_permissions: true, policies: [], direction: :inbound)
validate_source_project_and_target_project_access!(project, target_project, current_user) validate_source_project_and_target_project_access!(project, target_project, current_user)
link = allowlist(direction) link = allowlist(direction)
.add!(target_project, policies: policies, user: current_user) .add!(target_project, default_permissions: default_permissions, policies: policies, user: current_user)
ServiceResponse.success(payload: { project_link: link }) ServiceResponse.success(payload: { project_link: link })
......
...@@ -5,7 +5,7 @@ module JobTokenScope ...@@ -5,7 +5,7 @@ module JobTokenScope
class UpdatePoliciesService < ::BaseService class UpdatePoliciesService < ::BaseService
include EditScopeValidations include EditScopeValidations
def execute(target, policies) def execute(target, default_permissions, policies)
return unless Feature.enabled?(:add_policies_to_ci_job_token, project) return unless Feature.enabled?(:add_policies_to_ci_job_token, project)
validate_target_exists!(target) validate_target_exists!(target)
...@@ -15,7 +15,7 @@ def execute(target, policies) ...@@ -15,7 +15,7 @@ def execute(target, policies)
return error_link_not_found unless link return error_link_not_found unless link
if link.update(job_token_policies: policies) if link.update(default_permissions: default_permissions, job_token_policies: policies)
ServiceResponse.success(payload: link) ServiceResponse.success(payload: link)
else else
error_updating(link) error_updating(link)
......
...@@ -3134,6 +3134,7 @@ Input type: `CiJobTokenScopeAddGroupOrProjectInput` ...@@ -3134,6 +3134,7 @@ Input type: `CiJobTokenScopeAddGroupOrProjectInput`
| Name | Type | Description | | Name | Type | Description |
| ---- | ---- | ----------- | | ---- | ---- | ----------- |
| <a id="mutationcijobtokenscopeaddgrouporprojectclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. | | <a id="mutationcijobtokenscopeaddgrouporprojectclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationcijobtokenscopeaddgrouporprojectdefaultpermissions"></a>`defaultPermissions` **{warning-solid}** | [`Boolean`](#boolean) | **Deprecated:** **Status**: Experiment. Introduced in GitLab 17.8. |
| <a id="mutationcijobtokenscopeaddgrouporprojectjobtokenpolicies"></a>`jobTokenPolicies` **{warning-solid}** | [`[CiJobTokenScopePolicies!]`](#cijobtokenscopepolicies) | **Deprecated:** **Status**: Experiment. Introduced in GitLab 17.5. | | <a id="mutationcijobtokenscopeaddgrouporprojectjobtokenpolicies"></a>`jobTokenPolicies` **{warning-solid}** | [`[CiJobTokenScopePolicies!]`](#cijobtokenscopepolicies) | **Deprecated:** **Status**: Experiment. Introduced in GitLab 17.5. |
| <a id="mutationcijobtokenscopeaddgrouporprojectprojectpath"></a>`projectPath` | [`ID!`](#id) | Project that the CI job token scope belongs to. | | <a id="mutationcijobtokenscopeaddgrouporprojectprojectpath"></a>`projectPath` | [`ID!`](#id) | Project that the CI job token scope belongs to. |
| <a id="mutationcijobtokenscopeaddgrouporprojecttargetpath"></a>`targetPath` | [`ID!`](#id) | Group or project to be added to the CI job token scope. | | <a id="mutationcijobtokenscopeaddgrouporprojecttargetpath"></a>`targetPath` | [`ID!`](#id) | Group or project to be added to the CI job token scope. |
...@@ -3225,6 +3226,7 @@ Input type: `CiJobTokenScopeUpdatePoliciesInput` ...@@ -3225,6 +3226,7 @@ Input type: `CiJobTokenScopeUpdatePoliciesInput`
| Name | Type | Description | | Name | Type | Description |
| ---- | ---- | ----------- | | ---- | ---- | ----------- |
| <a id="mutationcijobtokenscopeupdatepoliciesclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. | | <a id="mutationcijobtokenscopeupdatepoliciesclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationcijobtokenscopeupdatepoliciesdefaultpermissions"></a>`defaultPermissions` | [`Boolean!`](#boolean) | Indicates whether default permissions are enabled (true) or fine-grained permissions are enabled (false). |
| <a id="mutationcijobtokenscopeupdatepoliciesjobtokenpolicies"></a>`jobTokenPolicies` | [`[CiJobTokenScopePolicies!]!`](#cijobtokenscopepolicies) | List of policies added to the CI job token scope. | | <a id="mutationcijobtokenscopeupdatepoliciesjobtokenpolicies"></a>`jobTokenPolicies` | [`[CiJobTokenScopePolicies!]!`](#cijobtokenscopepolicies) | List of policies added to the CI job token scope. |
| <a id="mutationcijobtokenscopeupdatepoliciesprojectpath"></a>`projectPath` | [`ID!`](#id) | Project that the CI job token scope belongs to. | | <a id="mutationcijobtokenscopeupdatepoliciesprojectpath"></a>`projectPath` | [`ID!`](#id) | Project that the CI job token scope belongs to. |
| <a id="mutationcijobtokenscopeupdatepoliciestargetpath"></a>`targetPath` | [`ID!`](#id) | Group or project that the CI job token targets. | | <a id="mutationcijobtokenscopeupdatepoliciestargetpath"></a>`targetPath` | [`ID!`](#id) | Group or project that the CI job token targets. |
...@@ -20496,6 +20498,7 @@ Represents an allowlist entry for the CI_JOB_TOKEN. ...@@ -20496,6 +20498,7 @@ Represents an allowlist entry for the CI_JOB_TOKEN.
| ---- | ---- | ----------- | | ---- | ---- | ----------- |
| <a id="cijobtokenscopeallowlistentryaddedby"></a>`addedBy` | [`UserCore`](#usercore) | User that added the entry. | | <a id="cijobtokenscopeallowlistentryaddedby"></a>`addedBy` | [`UserCore`](#usercore) | User that added the entry. |
| <a id="cijobtokenscopeallowlistentrycreatedat"></a>`createdAt` | [`Time!`](#time) | When the entry was created. | | <a id="cijobtokenscopeallowlistentrycreatedat"></a>`createdAt` | [`Time!`](#time) | When the entry was created. |
| <a id="cijobtokenscopeallowlistentrydefaultpermissions"></a>`defaultPermissions` | [`Boolean`](#boolean) | Indicates whether default permissions are enabled (true) or fine-grained permissions are enabled (false). |
| <a id="cijobtokenscopeallowlistentrydirection"></a>`direction` | [`String`](#string) | Direction of access. Defaults to INBOUND. | | <a id="cijobtokenscopeallowlistentrydirection"></a>`direction` | [`String`](#string) | Direction of access. Defaults to INBOUND. |
| <a id="cijobtokenscopeallowlistentryjobtokenpolicies"></a>`jobTokenPolicies` **{warning-solid}** | [`[CiJobTokenScopePolicies!]`](#cijobtokenscopepolicies) | **Introduced** in GitLab 17.5. **Status**: Experiment. List of policies for the entry. | | <a id="cijobtokenscopeallowlistentryjobtokenpolicies"></a>`jobTokenPolicies` **{warning-solid}** | [`[CiJobTokenScopePolicies!]`](#cijobtokenscopepolicies) | **Introduced** in GitLab 17.5. **Status**: Experiment. List of policies for the entry. |
| <a id="cijobtokenscopeallowlistentrysourceproject"></a>`sourceProject` | [`Project!`](#project) | Project that owns the allowlist entry. | | <a id="cijobtokenscopeallowlistentrysourceproject"></a>`sourceProject` | [`Project!`](#project) | Project that owns the allowlist entry. |
...@@ -7,21 +7,22 @@ module AddGroupService ...@@ -7,21 +7,22 @@ module AddGroupService
extend ::Gitlab::Utils::Override extend ::Gitlab::Utils::Override
override :execute override :execute
def execute(target_group, policies: []) def execute(target_group, default_permissions: true, policies: [])
super.tap do |response| super.tap do |response|
audit(project, target_group, current_user, policies) if response.success? audit(project, target_group, current_user, default_permissions, policies) if response.success?
end end
end end
private private
def audit(scope, target, author, policies) def audit(scope, target, author, default_permissions, policies)
audit_message = audit_message =
"Group #{target.full_path} was added to list of allowed groups for #{scope.full_path}" "Group #{target.full_path} was added to list of allowed groups for #{scope.full_path}"
event_name = 'secure_ci_job_token_group_added' event_name = 'secure_ci_job_token_group_added'
if ::Feature.enabled?(:add_policies_to_ci_job_token, scope) && policies.present? if ::Feature.enabled?(:add_policies_to_ci_job_token, scope) && policies.present?
audit_message += ", with job token permissions: #{policies.join(', ')}" audit_message += ", with default permissions: #{default_permissions}, " \
"job token policies: #{policies.join(', ')}"
end end
audit_context = { audit_context = {
......
...@@ -7,21 +7,25 @@ module AddProjectService ...@@ -7,21 +7,25 @@ module AddProjectService
extend ::Gitlab::Utils::Override extend ::Gitlab::Utils::Override
override :execute override :execute
def execute(target_project, policies: [], direction: :inbound) def execute(target_project, default_permissions: true, policies: [], direction: :inbound)
super.tap do |response| super.tap do |response|
audit(project, target_project, current_user, policies) if direction == :inbound && response.success? if direction == :inbound && response.success?
audit(project, target_project, current_user, default_permissions,
policies)
end
end end
end end
private private
def audit(scope, target, author, policies) def audit(scope, target, author, default_permissions, policies)
audit_message = audit_message =
"Project #{target.full_path} was added to inbound list of allowed projects for #{scope.full_path}" "Project #{target.full_path} was added to inbound list of allowed projects for #{scope.full_path}"
event_name = 'secure_ci_job_token_project_added' event_name = 'secure_ci_job_token_project_added'
if ::Feature.enabled?(:add_policies_to_ci_job_token, scope) && policies.present? if ::Feature.enabled?(:add_policies_to_ci_job_token, scope) && policies.present?
audit_message += ", with job token permissions: #{policies.join(', ')}" audit_message += ", with default permissions: #{default_permissions}, " \
"job token policies: #{policies.join(', ')}"
end end
audit_context = { audit_context = {
......
...@@ -21,7 +21,7 @@ def audit(scope, target, author, policies) ...@@ -21,7 +21,7 @@ def audit(scope, target, author, policies)
event_name = 'secure_ci_job_token_group_removed' event_name = 'secure_ci_job_token_group_removed'
if ::Feature.enabled?(:add_policies_to_ci_job_token, scope) && policies.present? if ::Feature.enabled?(:add_policies_to_ci_job_token, scope) && policies.present?
audit_message += ", with job token permissions: #{policies.join(', ')}" audit_message += ", with job token policies: #{policies.join(', ')}"
end end
audit_context = { audit_context = {
......
...@@ -23,7 +23,7 @@ def audit(scope, target, author, policies) ...@@ -23,7 +23,7 @@ def audit(scope, target, author, policies)
event_name = 'secure_ci_job_token_project_removed' event_name = 'secure_ci_job_token_project_removed'
if ::Feature.enabled?(:add_policies_to_ci_job_token, scope) && policies.present? if ::Feature.enabled?(:add_policies_to_ci_job_token, scope) && policies.present?
audit_message += ", with job token permissions: #{policies.join(', ')}" audit_message += ", with job token policies: #{policies.join(', ')}"
end end
audit_context = { audit_context = {
......
...@@ -7,17 +7,17 @@ module UpdatePoliciesService ...@@ -7,17 +7,17 @@ module UpdatePoliciesService
extend ::Gitlab::Utils::Override extend ::Gitlab::Utils::Override
override :execute override :execute
def execute(target, policies) def execute(target, default_permissions, policies)
super.tap do |response| super.tap do |response|
audit(project, target, current_user, policies) if response.success? audit(project, target, current_user, default_permissions, policies) if response.success?
end end
end end
private private
def audit(scope, target, author, policies) def audit(scope, target, author, default_permissions, policies)
audit_message = audit_message =
"CI job token policies updated to: #{policies.join(', ')}" "CI job token updated to default permissions: #{default_permissions}, policies: #{policies.join(', ')}"
event_name = 'secure_ci_job_token_policies_updated' event_name = 'secure_ci_job_token_policies_updated'
......
...@@ -33,8 +33,8 @@ ...@@ -33,8 +33,8 @@
{ {
project_path: project.full_path, project_path: project.full_path,
target_path: target.full_path, target_path: target.full_path,
job_token_policies: policies, default_permissions: false,
direction: :inbound job_token_policies: policies
} }
end end
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
let(:expected_audit_message) do let(:expected_audit_message) do
"Group #{target_group_path} was added to list of allowed groups for #{project_path}, " \ "Group #{target_group_path} was added to list of allowed groups for #{project_path}, " \
"with job token permissions: read_containers, read_packages" "with default permissions: false, job token policies: read_containers, read_packages"
end end
let(:event_name) { 'secure_ci_job_token_group_added' } let(:event_name) { 'secure_ci_job_token_group_added' }
...@@ -104,7 +104,7 @@ ...@@ -104,7 +104,7 @@
let(:expected_audit_message) do let(:expected_audit_message) do
"Project #{target_project_path} was added to inbound list of allowed projects for #{project_path}, " \ "Project #{target_project_path} was added to inbound list of allowed projects for #{project_path}, " \
"with job token permissions: read_containers, read_packages" "with default permissions: false, job token policies: read_containers, read_packages"
end end
let(:event_name) { 'secure_ci_job_token_project_added' } let(:event_name) { 'secure_ci_job_token_project_added' }
......
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
context 'when user removes target group to the job token scope' do context 'when user removes target group to the job token scope' do
let(:expected_audit_message) do let(:expected_audit_message) do
"Group #{target_group_path} was removed from list of allowed groups for #{project_path}, " \ "Group #{target_group_path} was removed from list of allowed groups for #{project_path}, " \
"with job token permissions: read_containers, read_packages" "with job token policies: read_containers, read_packages"
end end
let(:event_name) { 'secure_ci_job_token_group_removed' } let(:event_name) { 'secure_ci_job_token_group_removed' }
......
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
let(:expected_audit_message) do let(:expected_audit_message) do
"Project #{target_project_path} was removed from inbound list of allowed projects for #{project_path}, " \ "Project #{target_project_path} was removed from inbound list of allowed projects for #{project_path}, " \
"with job token permissions: read_containers, read_packages" "with job token policies: read_containers, read_packages"
end end
let(:event_name) { 'secure_ci_job_token_project_removed' } let(:event_name) { 'secure_ci_job_token_project_removed' }
......
...@@ -10,12 +10,14 @@ ...@@ -10,12 +10,14 @@
let_it_be(:policies) { %w[read_containers read_packages] } let_it_be(:policies) { %w[read_containers read_packages] }
subject(:service_result) { described_class.new(project, current_user).execute(target_group, policies: policies) } subject(:service_result) do
described_class.new(project, current_user).execute(target_group, default_permissions: false, policies: policies)
end
describe '#execute' do describe '#execute' do
let(:expected_audit_message) do let(:expected_audit_message) do
"Group #{target_group.full_path} was added to list of allowed groups for #{project.full_path}, " \ "Group #{target_group.full_path} was added to list of allowed groups for #{project.full_path}, " \
"with job token permissions: read_containers, read_packages" "with default permissions: false, job token policies: read_containers, read_packages"
end end
let(:audit_event) do let(:audit_event) do
......
...@@ -13,14 +13,15 @@ ...@@ -13,14 +13,15 @@
let_it_be(:direction) { :inbound } let_it_be(:direction) { :inbound }
subject(:service_result) do subject(:service_result) do
described_class.new(project, current_user).execute(target_project, policies: policies, direction: direction) described_class.new(project, current_user).execute(target_project, default_permissions: false, policies: policies,
direction: direction)
end end
describe '#execute' do describe '#execute' do
context 'when the direction is inbound' do context 'when the direction is inbound' do
let(:expected_audit_message) do let(:expected_audit_message) do
"Project #{target_project.full_path} was added to inbound list of allowed projects for #{project.full_path}, " \ "Project #{target_project.full_path} was added to inbound list of allowed projects for #{project.full_path}, " \
"with job token permissions: read_containers, read_packages" "with default permissions: false, job token policies: read_containers, read_packages"
end end
let(:audit_event) do let(:audit_event) do
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
describe '#execute' do describe '#execute' do
let(:expected_audit_message) do let(:expected_audit_message) do
"Group #{target_group.full_path} was removed from list of allowed groups for #{project.full_path}, " \ "Group #{target_group.full_path} was removed from list of allowed groups for #{project.full_path}, " \
"with job token permissions: read_containers, read_packages" "with job token policies: read_containers, read_packages"
end end
let(:audit_event) do let(:audit_event) do
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册