使用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中调用它?
答案 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之前,都会调用之前块。