# File lib/fog/aws/requests/lambda/add_permission.rb, line 47
        def add_permission(params={})
          function_id = params.delete('FunctionName')
          function = self.get_function_configuration(
            'FunctionName' => function_id
          ).body
          function_arn = function['FunctionArn']

          action         = params.delete('Action')
          principal      = params.delete('Principal')
          source_account = params.delete('SourceAccount')
          source_arn     = params.delete('SourceArn')
          sid            = params.delete('StatementId')

          if action.nil? || action.empty?
            message = 'Action cannot be blank'
            raise Fog::AWS::Lambda::Error, message
          end

          if principal.nil? || principal.empty?
            message = 'Principal cannot be blank'
            raise Fog::AWS::Lambda::Error, message
          end

          if sid.nil? || sid.empty?
            message = 'Sid cannot be blank'
            raise Fog::AWS::Lambda::Error, message
          end

          statement = {
            'Action'      => [action],
            'Principal'   => { 'Service' => principal },
            'Sid'         => sid,
            'Resource'    => function_arn,
            'Effect'      => 'Allow'
          }
          if source_arn
            statement['Condition'] = {}
            statement['Condition']['ArnLike'] = {
              'AWS:SourceArn' => source_arn
            }
          end

          self.data[:permissions][function_arn] ||= []
          self.data[:permissions][function_arn] << statement

          response = Excon::Response.new
          response.status = 201
          response.body = { 'Statement' => statement }
          response
        end