28 lines
		
	
	
		
			979 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			979 B
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| module Gitlab
 | |
|   module Database
 | |
|     # Model that can be used for querying permissions of a SQL user.
 | |
|     class Grant
 | |
|       # Returns true if the current user can create and execute triggers on the
 | |
|       # given table.
 | |
|       def self.create_and_execute_trigger?(table)
 | |
|         # We _must not_ use quote_table_name as this will produce double
 | |
|         # quotes on PostgreSQL and for "has_table_privilege" we need single
 | |
|         # quotes.
 | |
|         connection = ActiveRecord::Base.connection
 | |
|         quoted_table = connection.quote(table)
 | |
| 
 | |
|         begin
 | |
|           connection.select_one("SELECT has_table_privilege(#{quoted_table}, 'TRIGGER')").present?
 | |
|         rescue ActiveRecord::StatementInvalid
 | |
|           # This error is raised when using a non-existing table name. In this
 | |
|           # case we just want to return false as a user technically can't
 | |
|           # create triggers for such a table.
 | |
|           false
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |