summaryrefslogtreecommitdiff
path: root/lib/gitlab/database/grant.rb
blob: aee3981e79ab0d613084ba653b8fd7ea19e4895e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
module Gitlab
  module Database
    # Model that can be used for querying permissions of a SQL user.
    class Grant < ActiveRecord::Base
      self.table_name =
        if Database.postgresql?
          'information_schema.role_table_grants'
        else
          'mysql.user'
        end

      def self.scope_to_current_user
        if Database.postgresql?
          where('grantee = user')
        else
          where("CONCAT(User, '@', Host) = current_user()")
        end
      end

      # Returns true if the current user can create and execute triggers on the
      # given table.
      def self.create_and_execute_trigger?(table)
        priv =
          if Database.postgresql?
            where(privilege_type: 'TRIGGER', table_name: table)
          else
            where(Trigger_priv: 'Y')
          end

        priv.scope_to_current_user.any?
      end
    end
  end
end