Class: Types::BaseObject

Inherits:
GraphQL::Schema::Object
  • Object
show all
Includes:
Gitlab::Graphql::ExposePermissions, Gitlab::Graphql::MarkdownField, Gitlab::Graphql::Present
Defined in:
app/graphql/types/base_object.rb

Direct Known Subclasses

AbuseReportType, AccessLevelType, AccessLevels::DeployKeyType, AccessLevels::UserType, Achievements::AchievementType, Achievements::UserAchievementType, Admin::Analytics::UsageTrends::MeasurementType, Admin::SidekiqQueues::DeleteJobsResponseType, AlertManagement::AlertStatusCountsType, AlertManagement::AlertType, AlertManagement::HttpIntegrationType, AlertManagement::PrometheusIntegrationType, Analytics::CycleAnalytics::LinkType, Analytics::CycleAnalytics::MetricType, Analytics::CycleAnalytics::ValueStreamType, Analytics::CycleAnalytics::ValueStreams::StageItemsType, Analytics::CycleAnalytics::ValueStreams::StageMetricsType, Analytics::CycleAnalytics::ValueStreams::StageType, AntiAbuse::AbuseReportLabelType, AppConfig::GitlabInstanceFeatureFlagType, AppConfig::InstanceMetadataType, AppConfig::KasType, AuditEvents::DefinitionType, AwardEmojis::AwardEmojiType, Types::Blame::BlameType, Types::Blame::CommitDataType, Types::Blame::GroupsType, BlobViewerType, BoardListType, BoardType, Types::BranchProtections::BaseAccessLevelType, Types::BranchRules::BranchProtectionType, BranchType, Ci::AnalyticsPeriodType, Ci::AnalyticsType, Ci::ApplicationSettingType, Ci::BuildNeedType, Ci::Catalog::ResourceType, Ci::Catalog::Resources::ComponentType, Ci::Catalog::Resources::Components::InputType, Ci::Catalog::Resources::VersionType, Ci::CiCdSettingType, Ci::CodeQualityReportSummaryType, Ci::Config::ConfigType, Ci::Config::GroupType, Ci::Config::IncludeType, Ci::Config::JobRestrictionType, Ci::Config::JobType, Ci::Config::NeedType, Ci::Config::StageType, Ci::ConfigVariableType, Ci::DetailedStatusType, Ci::DurationStatisticsType, Ci::FreezePeriodType, Ci::GroupEnvironmentScopeType, Ci::GroupType, Ci::InheritedCiVariableType, Ci::InstanceVariableType, Ci::JobArtifactType, Ci::JobTokenAuthLogType, Ci::JobTokenScope::AllowlistEntryType, Ci::JobTokenScope::AllowlistType, Ci::JobTokenScope::JobTokenPolicyCategoryType, Ci::JobTokenScope::JobTokenPolicyType, Ci::JobTokenScopeType, Ci::JobTraceType, Ci::JobType, Ci::ManualVariableType, Ci::PipelineCountsType, Ci::PipelineManualVariableType, Ci::PipelineMessageType, Ci::PipelineScheduleType, Ci::PipelineScheduleVariableType, Ci::PipelineTriggerType, Ci::PipelineType, Ci::ProjectVariableType, Ci::RecentFailuresType, Ci::RunnerArchitectureType, Ci::RunnerManagerType, Ci::RunnerPlatformType, Ci::RunnerSetupType, Ci::RunnerType, Ci::StageType, Ci::StatusActionType, Ci::TemplateType, Ci::TestCaseType, Ci::TestReportSummaryType, Ci::TestReportTotalType, Ci::TestSuiteSummaryType, Ci::TestSuiteType, CiConfiguration::Sast::AnalyzersEntityType, CiConfiguration::Sast::EntityType, CiConfiguration::Sast::OptionsEntityType, CiConfiguration::Sast::Type, Clusters::AgentActivityEventType, Clusters::AgentTokenType, Clusters::AgentType, Clusters::Agents::Authorizations::CiAccessType, Clusters::Agents::Authorizations::UserAccessType, CommitReferencesType, CommitSignatures::GpgSignatureType, CommitSignatures::SshSignatureType, CommitSignatures::X509SignatureType, CommitType, ContainerExpirationPolicyType, ContainerRegistry::ContainerRepositoryReferrerType, ContainerRegistry::ContainerRepositoryTagType, ContainerRegistry::ContainerRepositoryType, ContainerRegistry::ContainerTagsExpirationPolicyType, ContainerRegistry::Protection::RuleType, CustomEmojiType, CustomerRelations::ContactStateCountsType, CustomerRelations::ContactType, CustomerRelations::OrganizationStateCountsType, CustomerRelations::OrganizationType, DataTransfer::BaseType, DataTransfer::EgressNodeType, DeploymentTagType, DeploymentType, DescriptionVersionType, DesignManagement::DesignAtVersionType, DesignManagement::DesignCollectionType, DesignManagement::DesignType, DesignManagement::VersionType, DesignManagementType, DiffRefsType, DiffStatsSummaryType, DiffStatsType, DiffType, EnvironmentType, ErrorTracking::SentryDetailedErrorType, ErrorTracking::SentryErrorCollectionType, ErrorTracking::SentryErrorFrequencyType, ErrorTracking::SentryErrorStackTraceContextType, ErrorTracking::SentryErrorStackTraceEntryType, ErrorTracking::SentryErrorStackTraceType, ErrorTracking::SentryErrorTagsType, ErrorTracking::SentryErrorType, EventType, EvidenceType, GrafanaIntegrationType, GroupInvitationType, GroupMemberType, IdeType, Import::SourceUserType, IncidentManagement::TimelineEventTagType, IncidentManagement::TimelineEventType, Integrations::ExclusionType, IssueStatusCountsType, IssueType, JiraImportType, JiraUserType, Kas::AgentConfigurationType, Kas::AgentConnectionType, Kas::AgentMetadataType, Kas::AgentVersionWarningType, Kas::AgentWarningType, KeyType, LabelType, MergeRequestType, MergeRequests::MergeabilityCheckType, Metrics::Dashboards::AnnotationType, MilestoneStatsType, MilestoneType, Ml::CandidateLinksType, Ml::CandidateMetadataType, Ml::CandidateMetricType, Ml::CandidateParamType, Ml::CandidateType, Ml::ModelLinksType, Ml::ModelType, Ml::ModelVersionLinksType, Ml::ModelVersionType, MutationType, NamespaceType, Namespaces::SidebarType, NestedEnvironmentType, Notes::AbuseReport::DiscussionType, Notes::AbuseReport::NoteType, Notes::DeletedNoteType, Notes::DiffPositionType, Notes::DiscussionType, Notes::NoteType, Notes::QuickActionsStatusType, Notes::SystemNoteMetadataType, Organizations::OrganizationType, Organizations::OrganizationUserAccessLevelType, Organizations::OrganizationUserBadgeType, Organizations::OrganizationUserType, Packages::Cleanup::PolicyType, Packages::Composer::JsonType, Packages::Composer::MetadatumType, Packages::Conan::FileMetadatumType, Packages::Conan::MetadatumType, Packages::Helm::DependencyType, Packages::Helm::FileMetadatumType, Packages::Helm::MaintainerType, Packages::Helm::MetadataType, Packages::Maven::MetadatumType, Packages::Nuget::DependencyLinkMetadatumType, Packages::Nuget::MetadatumType, Packages::PackageBaseType, Packages::PackageDependencyLinkType, Packages::PackageDependencyType, Packages::PackageFileType, Packages::PackageLinksType, Packages::PackageTagType, Packages::Protection::RuleType, Packages::Pypi::MetadatumType, Packages::TerraformModule::Metadatum::DependenciesType, Packages::TerraformModule::Metadatum::DependencyType, Packages::TerraformModule::Metadatum::ExampleType, Packages::TerraformModule::Metadatum::FieldsType, Packages::TerraformModule::Metadatum::InputType, Packages::TerraformModule::Metadatum::OutputType, Packages::TerraformModule::Metadatum::RootType, Packages::TerraformModule::Metadatum::SubmoduleType, Packages::TerraformModule::MetadatumType, PagesDeploymentType, PermissionTypes::BasePermissionType, ProjectFeatureAccessLevelType, ProjectInvitationType, ProjectMemberType, ProjectPlanLimitsType, ProjectStatisticsRedirectType, ProjectStatisticsType, ProjectType, Projects::BranchRuleType, Projects::CommitParentNamesType, Projects::DetailedImportStatusType, Projects::ForkDetailsType, Projects::RepositoryLanguageType, Projects::Services::BaseServiceType, Projects::Services::JiraProjectType, Projects::Services::JiraServiceType, Projects::TopicType, PrometheusAlertType, QueryComplexityType, QueryType, ReleaseAssetLinkType, ReleaseAssetsType, ReleaseLinksType, ReleaseSourceType, ReleaseType, Repository::BlobType, RepositoryType, RootStorageStatisticsType, SavedReplyType, Security::CodequalityReportsComparer::DegradationType, Security::CodequalityReportsComparer::ReportType, Security::CodequalityReportsComparer::SummaryType, Security::CodequalityReportsComparerType, SnippetType, Snippets::BlobType, SubscriptionType, TaskCompletionStatus, Terraform::StateType, Terraform::StateVersionType, TimeTracking::TimelogCategoryType, TimelogType, TodoType, Tree::BlobType, Tree::SubmoduleType, Tree::TreeEntryType, Tree::TreeType, UploadType, UserCalloutType, UserMergeRequestInteractionType, UserPreferencesType, UserStatusType, UserType, Users::EmailType, Users::NamespaceCommitEmailType, Wikis::WikiPageType, WorkItemStateCountsType, WorkItemType, WorkItems::ClosingMergeRequestType, WorkItems::DescriptionTemplateType, WorkItems::EmailParticipantType, WorkItems::LinkedItemType, WorkItems::RelatedBranchType, WorkItems::TypeType, WorkItems::WidgetDefinitions::AssigneesType, WorkItems::WidgetDefinitions::GenericType, WorkItems::WidgetDefinitions::HierarchyType, WorkItems::Widgets::AssigneesType, WorkItems::Widgets::AwardEmojiType, WorkItems::Widgets::CrmContactsType, WorkItems::Widgets::CurrentUserTodosType, WorkItems::Widgets::DescriptionType, WorkItems::Widgets::DesignsType, WorkItems::Widgets::DevelopmentType, WorkItems::Widgets::EmailParticipantsType, WorkItems::Widgets::HierarchyType, WorkItems::Widgets::LabelsType, WorkItems::Widgets::LinkedItemsType, WorkItems::Widgets::MilestoneType, WorkItems::Widgets::NotesType, WorkItems::Widgets::NotificationsType, WorkItems::Widgets::ParticipantsType, WorkItems::Widgets::StartAndDueDateType, WorkItems::Widgets::TimeTracking::TimeTrackingType, WorkItems::Widgets::TimeTracking::TimelogType, WorkItems::WorkItemTypeCountsByStateType, WorkItems::WorkItemTypeDepthLimitReachedByType, X509CertificateType, X509IssuerType

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Gitlab::Graphql::Present

#present, #unpresented

Class Method Details

.accepts(*types) ⇒ Object



19
20
21
22
23
# File 'app/graphql/types/base_object.rb', line 19

def self.accepts(*types)
  @accepts ||= []
  @accepts += types
  @accepts
end

.assignable?(object) ⇒ Boolean

Returns:

  • (Boolean)


49
50
51
52
53
54
55
# File 'app/graphql/types/base_object.rb', line 49

def self.assignable?(object)
  assignable = accepts

  return true if assignable.blank?

  assignable.any? { |cls| object.is_a?(cls) }
end

.authorizationObject



34
35
36
# File 'app/graphql/types/base_object.rb', line 34

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

.authorization_scopesObject



30
31
32
# File 'app/graphql/types/base_object.rb', line 30

def self.authorization_scopes
  [:api, :read_api]
end

.authorize(*args) ⇒ Object



12
13
14
15
16
17
# File 'app/graphql/types/base_object.rb', line 12

def self.authorize(*args)
  raise 'Cannot redefine authorize' if @authorize_args && args.any?

  @authorize_args = args.freeze if args.any?
  @authorize_args || (superclass.respond_to?(:authorize) ? superclass.authorize : nil)
end

.authorized?(object, context) ⇒ Boolean

Returns:

  • (Boolean)


38
39
40
41
42
43
# File 'app/graphql/types/base_object.rb', line 38

def self.authorized?(object, context)
  authorization.ok?(object, context[:current_user],
    scope_validator: context[:scope_validator],
    skip_abilities: context[:skip_type_authorization]
  )
end

Instance Method Details

#current_userObject



45
46
47
# File 'app/graphql/types/base_object.rb', line 45

def current_user
  context[:current_user]
end

#idObject

All graphql fields exposing an id, should expose a global id.



26
27
28
# File 'app/graphql/types/base_object.rb', line 26

def id
  GitlabSchema.id_from_object(object)
end