Class: Gitlab::ProjectAuthorizations

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/project_authorizations.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(user) ⇒ ProjectAuthorizations

user - The User object for which to calculate the authorizations.



10
11
12
# File 'lib/gitlab/project_authorizations.rb', line 10

def initialize(user)
  @user = user
end

Instance Attribute Details

#userObject (readonly)

Returns the value of attribute user.



7
8
9
# File 'lib/gitlab/project_authorizations.rb', line 7

def user
  @user
end

Instance Method Details

#calculateObject



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/gitlab/project_authorizations.rb', line 14

def calculate
  if Feature.enabled?(:compare_project_authorization_linear_cte, user)
    linear_relation = calculate_with_linear_query
    recursive_relation = calculate_with_recursive_query
    recursive_set = Set.new(recursive_relation.to_a.pluck(:project_id, :access_level))
    linear_set = Set.new(linear_relation.to_a.pluck(:project_id, :access_level))
    if linear_set == recursive_set
      Gitlab::AppJsonLogger.info(event: 'linear_authorized_projects_check',
                                 user_id: user.id,
                                 matching_results: true)
      return calculate_with_linear_query
    else
      Gitlab::AppJsonLogger.warn(event: 'linear_authorized_projects_check',
                                 user_id: user.id,
                                 matching_results: false)
    end
  end

  Gitlab::AppJsonLogger.info(event: 'linear_authorized_projects_check_with_flag',
                             feature_flag_status: Feature.enabled?(:linear_project_authorization, user))

  if Feature.enabled?(:linear_project_authorization, user)
    calculate_with_linear_query
  else
    calculate_with_recursive_query
  end
end