Class: Mutations::BaseMutation

Inherits:
GraphQL::Schema::RelayClassicMutation
  • Object
show all
Includes:
Gitlab::Graphql::Authorize::AuthorizeResource, Gitlab::Graphql::CopyFieldDescription, Gitlab::Graphql::VersionFilter::FutureFieldFallback
Defined in:
app/graphql/mutations/base_mutation.rb

Direct Known Subclasses

Achievements::Award, Achievements::Create, Achievements::Delete, Achievements::DeleteUserAchievement, Achievements::Revoke, Achievements::Update, Achievements::UpdateUserAchievement, Achievements::UpdateUserAchievementPriorities, Admin::SidekiqQueues::DeleteJobs, AlertManagement::Base, AlertManagement::HttpIntegration::HttpIntegrationBase, AwardEmojis::Base, Mutations::Boards::Create, Mutations::Boards::Destroy, Mutations::Boards::Lists::BaseCreate, Mutations::Boards::Lists::BaseUpdate, Mutations::Boards::Lists::Destroy, Mutations::Boards::Update, Mutations::BranchRules::Create, Mutations::BranchRules::Delete, Mutations::BranchRules::Update, Ci::Catalog::Resources::Base, Ci::Job::Base, Ci::JobArtifact::BulkDestroy, Ci::JobArtifact::Destroy, Ci::JobTokenScope::AddGroupOrProject, Ci::JobTokenScope::AddProject, Ci::JobTokenScope::AutopopulateAllowlist, Ci::JobTokenScope::ClearAllowlistAutopopulations, Ci::JobTokenScope::RemoveGroup, Ci::JobTokenScope::RemoveProject, Ci::JobTokenScope::UpdateJobTokenPolicies, Ci::Lint, Ci::NamespaceSettingsUpdate, Ci::Pipeline::Base, Ci::Pipeline::Create, Ci::PipelineSchedule::Base, Ci::PipelineSchedule::Create, Ci::PipelineTrigger::Create, Ci::PipelineTrigger::Delete, Ci::PipelineTrigger::Update, Ci::ProjectCiCdSettingsUpdate, Ci::Runner::AssignToProject, Ci::Runner::BulkDelete, Ci::Runner::BulkPause, Ci::Runner::Cache::Clear, Ci::Runner::Create, Ci::Runner::Delete, Ci::Runner::UnassignFromProject, Ci::Runner::Update, Ci::RunnersRegistrationToken::Reset, Ci::SafeDisablePipelineVariables, Clusters::AgentTokens::Create, Clusters::AgentTokens::Revoke, Clusters::Agents::Create, Clusters::Agents::Delete, Commits::Create, ContainerExpirationPolicies::Update, ContainerRegistry::Protection::Rule::Create, ContainerRegistry::Protection::Rule::Delete, ContainerRegistry::Protection::Rule::Update, ContainerRegistry::Protection::TagRule::Create, ContainerRegistry::Protection::TagRule::Delete, ContainerRegistry::Protection::TagRule::Update, ContainerRepositories::DestroyBase, CustomEmoji::Create, CustomEmoji::Destroy, CustomerRelations::Contacts::Base, CustomerRelations::Organizations::Create, CustomerRelations::Organizations::Update, DependencyProxy::GroupSettings::Update, DependencyProxy::ImageTtlGroupPolicy::Update, DesignManagement::Base, DesignManagement::Move, DesignManagement::Update, Discussions::ToggleResolve, Echo, Environments::CanaryIngress::Update, Environments::Create, Environments::Delete, Environments::Stop, Environments::Update, Groups::Update, Import::SourceUsers::CancelReassignment, Import::SourceUsers::KeepAllAsPlaceholder, Import::SourceUsers::KeepAsPlaceholder, Import::SourceUsers::Reassign, Import::SourceUsers::ResendNotification, Import::SourceUsers::UndoKeepAsPlaceholder, IncidentManagement::TimelineEvent::Base, IncidentManagement::TimelineEventTag::Base, Integrations::Exclusions::Create, Integrations::Exclusions::Delete, Issues::Base, Issues::Create, Issues::SetSubscription, JiraImport::ImportUsers, JiraImport::Start, Labels::Create, Labels::Update, Members::BulkUpdateBase, MergeRequests::Base, MergeRequests::Create, MergeRequests::SetSubscription, Metrics::Dashboard::Annotations::Create, Metrics::Dashboard::Annotations::Delete, Ml::ModelVersions::Create, Ml::ModelVersions::Delete, Ml::ModelVersions::Edit, Ml::Models::Base, Namespace::PackageSettings::Update, Namespaces::RegenerateNewWorkItemEmailAddress, Notes::Base, Organizations::Base, Organizations::OrganizationUsers::Base, Packages::BulkDestroy, Packages::Cleanup::Policy::Update, Packages::Destroy, Packages::DestroyFile, Packages::DestroyFiles, Packages::Protection::Rule::Create, Packages::Protection::Rule::Delete, Packages::Protection::Rule::Update, Pages::Base, Pages::Deployment::Delete, Pages::Deployment::Restore, Projects::BlobsRemove, Projects::BranchRules::SquashOptions::Update, Projects::Star, Projects::SyncFork, Projects::TextReplace, ReleaseAssetLinks::Create, ReleaseAssetLinks::Delete, ReleaseAssetLinks::Update, Releases::Base, Repositories::Branches::Create, Repositories::Branches::Delete, Repositories::Tags::Create, Repositories::Tags::Delete, SavedReplies::Base, Security::CiConfiguration::BaseSecurityAnalyzer, Snippets::Base, Snippets::Create, Terraform::State::Base, Timelogs::Base, Todos::BaseMany, Todos::Create, Todos::DeleteAllDone, Todos::MarkAllDone, Todos::MarkDone, Todos::Restore, Todos::Snooze, Todos::UnSnooze, Uploads::Delete, UserCallouts::Create, UserPreferences::Update, Users::GroupCallouts::Create, Users::SetNamespaceCommitEmail, Wikis::WikiPageSubscribe, WorkItems::AddClosingMergeRequest, WorkItems::BulkMove, WorkItems::BulkUpdate, WorkItems::CSV::Export, WorkItems::CSV::Import, WorkItems::Convert, WorkItems::Create, WorkItems::CreateFromTask, WorkItems::Delete, WorkItems::Hierarchy::AddChildrenItems, WorkItems::Hierarchy::Reorder, WorkItems::LinkedItems::Base, WorkItems::Reorder, WorkItems::Subscribe, WorkItems::Update, WorkItems::UserPreference::Update

Constant Summary collapse

ERROR_MESSAGE =
'You cannot perform write operations on a read-only instance'

Constants included from Gitlab::Graphql::Authorize::AuthorizeResource

Gitlab::Graphql::Authorize::AuthorizeResource::ConfigurationError, Gitlab::Graphql::Authorize::AuthorizeResource::RESOURCE_ACCESS_ERROR

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Gitlab::Graphql::Authorize::AuthorizeResource

#authorize!, #authorized_find!, #authorized_resource?, #find_object, #raise_resource_not_available_error!

Class Method Details

.authorizationObject

See: AuthorizeResource#authorized_resource?



72
73
74
# File 'app/graphql/mutations/base_mutation.rb', line 72

def self.authorization
  @authorization ||= ::Gitlab::Graphql::Authorize::ObjectAuthorization.new(authorize, authorization_scopes)
end

.authorization_scopesObject



67
68
69
# File 'app/graphql/mutations/base_mutation.rb', line 67

def self.authorization_scopes
  [:api]
end

.authorized?(object, context) ⇒ Boolean

Returns:

  • (Boolean)


58
59
60
61
62
63
64
65
# File 'app/graphql/mutations/base_mutation.rb', line 58

def self.authorized?(object, context)
  auth = ::Gitlab::Graphql::Authorize::ObjectAuthorization.new(:execute_graphql_mutation, authorization_scopes)
  return true if auth.ok?(:global, context[:current_user],
    scope_validator: context[:scope_validator])

  # in our mutations we raise, rather than returning a null value.
  raise_resource_not_available_error!
end

.authorizes_object?Boolean

Returns:

  • (Boolean)


54
55
56
# File 'app/graphql/mutations/base_mutation.rb', line 54

def self.authorizes_object?
  true
end

Instance Method Details

#api_user?Boolean

Returns:

  • (Boolean)


23
24
25
# File 'app/graphql/mutations/base_mutation.rb', line 23

def api_user?
  context[:is_sessionless_user]
end

#current_userObject



19
20
21
# File 'app/graphql/mutations/base_mutation.rb', line 19

def current_user
  context[:current_user]
end

#errors_on_object(record) ⇒ Object

Returns Array of errors on an ActiveRecord object



28
29
30
# File 'app/graphql/mutations/base_mutation.rb', line 28

def errors_on_object(record)
  record.errors.full_messages
end

#load_application_object(argument, id, context) ⇒ Object



42
43
44
# File 'app/graphql/mutations/base_mutation.rb', line 42

def load_application_object(argument, id, context)
  ::Gitlab::Graphql::Lazy.new { super }
end

#read_only?Boolean

Returns:

  • (Boolean)


38
39
40
# File 'app/graphql/mutations/base_mutation.rb', line 38

def read_only?
  Gitlab::Database.read_only?
end

#ready?(**args) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
35
36
# File 'app/graphql/mutations/base_mutation.rb', line 32

def ready?(**args)
  raise_resource_not_available_error!(ERROR_MESSAGE) if read_only?

  true
end

#unauthorized_object(error) ⇒ Object



46
47
48
49
50
51
52
# File 'app/graphql/mutations/base_mutation.rb', line 46

def unauthorized_object(error)
  # The default behavior is to abort processing and return nil for the
  # entire mutation field, but not set any top-level errors. We prefer to
  # at least say that something went wrong.
  Gitlab::ErrorTracking.track_exception(error)
  raise_resource_not_available_error!
end