在与Doorkeeper结合使用jsonapi-resources gem的0.6.0
版本时,我在查看资源中context
对象中的当前用户时遇到问题。
我基本上是按照the docs进行操作的,但是我不会尝试在资源的context
方法中看到在ApplicationController
中设置的fetchable_fields
。我确实确认context
实际上是在我的ApplicationController
中设置的。
这是我所拥有的
应用控制器
class ApplicationController < JSONAPI::ResourceController
protect_from_forgery with: :null_session
def context
{current_user: current_user}
end
end
控制者
class Api::ItemsController < ApplicationController
prepend_before_action :doorkeeper_authorize!
end
资源资源
class Api::ItemResource < JSONAPI::Resource
# attributes
def fetchable_fields
# context is always nil here
if (context[:current_user].guest)
super - [:field_i_want_private]
else
super
end
end
end
最佳答案
好吧,使用在jsonapi-resources顶部创建的jsonapi-utils gem –您将编写如下内容:
ApplicationController:
class ApplicationController < JSONAPI::ResourceController
include JSONAPI::Utils
protect_from_forgery with: :null_session
end
ItemsController:
class API::ItemsController < ApplicationController
prepend_before_action :doorkeeper_authorize!
before_action :load_user
def index
jsonapi_render json: @user.items
end
private
def load_user
@user = User.find(params[:id])
end
end
无需定义上下文:-)
希望对您有帮助。干杯!