Search code examples
ruby-on-rails-4grape-api

Grape params vlidation not working for get action


I'm trying to do a params validation check for my get action. But somehow it's not working. Can someone suggest me how can we do. Below is my code for the same. If I send a request without any parameters, params validation is not happening. May I know the reason for that and how can I fix that please.

module API
  module V1
    class Permissions < Grape::API
      include Defaults

      helpers do
        def ensure_user_exists!
          error!('Not authorized', 401) unless user_by_token.present?
        end

        def user_by_token
          @user ||= User.find_by(token: params[:user_token])
        end
      end

      resource :permissions do
        params do
          requires :user_token, type: String
        end

        before do
          ensure_user_exists!
        end

        resource :documents do
          get :document_details do
            error!('Access Denied', 403) unless user_by_token.manager?
          end
        end
      end
    end
  end
end



localhost:3000/api/permissions/documents/document_details.json returning error in user_by_token method.

Solution

  • You misplaced the params block. You should have placed it before the get block, like this:

    module API
      module V1
        class Permissions < Grape::API
          include Defaults
    
          helpers do
            def ensure_user_exists!
              error!('Not authorized', 401) unless user_by_token.present?
            end
    
            def user_by_token
              @user ||= User.find_by(token: params[:user_token])
            end
          end
    
          resource :permissions do
    
            before do
              ensure_user_exists!
            end
    
            resource :documents do
    
              params do
                requires :user_token, type: String
              end
              get :document_details do
                error!('Access Denied', 403) unless user_by_token.manager?
              end
    
            end
          end
        end
      end
    end