在Grape API名称空间上调用帮助器

时间:2016-08-18 16:01:41

标签: ruby-on-rails grape-api

使用Grape API处理API,并想知道在调用api之前是否可以在命名空间中调用函数。我们有两种方法可以在API中验证权限,而不是在每次API调用中调用它们,我想先在命名空间中进行调用。

api.rb 看起来像这样:

Module MyModule
  class API < Grape::API
    .
    .
    .
    helpers do
      .
      .
      . 
      def authenticate!
        raise CanCan::AccessDenied unless authenticated?
      end

      def authorize!(*args)
        # Not a super user and trying to access the API of a company other than your own?
        if !current_user.super_user? && current_user.company != @company
          raise CanCan::AccessDenied
        end

        Ability.new(current_user, host_parts).authorize!(*args)
      end
    end

    ################################################
    # Clerk API
    namespace :clerk do
      authenticate!
      resource: myResource do
        **API code here**
      end
    end
  end
end

是否可以调用身份验证!对于像我这样的整个命名空间而不是在每个API中调用它?

1 个答案:

答案 0 :(得分:1)

您可以在命名空间内使用之前的块。你的代码是这样的:

Module MyModule
  class API < Grape::API
    helpers do
        def authenticate!
            raise CanCan::AccessDenied unless authenticated?
        end

        def authorize!(*args)
            if !current_user.super_user? && current_user.company != @company
                raise CanCan::AccessDenied
        end

        Ability.new(current_user, host_parts).authorize!(*args)
      end
    end

    # Clerk API
    namespace :clerk do
      resource: myResource do
          before do
              authenticate!
          end
      end
    end
  end
end

在每次调用API之前,都会调用之前块。