将jsonapi-resources gem的版本0.6.0
与Doorkeeper结合使用我在查看资源中context
对象中的当前用户时遇到问题。
我基本上关注the docs,但是我尝试的任何内容都不会使我在context
中设置的ApplicationController
在资源的fetchable_fields
方法中可见。我确认context
实际上已设置了ApplicationController
。
这就是我所拥有的
的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
答案 0 :(得分:0)
好吧,使用在jsonapi资源之上创建的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
无需定义上下文: - )
我希望它可以帮到你。干杯!
答案 1 :(得分:0)
context
中不需要ApplicationController
方法。实际上可以通过框架在Resource
类中使用上下文。在您的资源中,您可以访问:
@context[:current_user]
答案 2 :(得分:0)
以您的示例为例,这是我的解决方法
资源
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
# upgrade
def self.create(context)
# You can use association here but not with association table
# only works when `id` is inside the table of the resource
ItemResource.new(Item.new, context)
end
before_save do
# Context is now available with `self.context`
self.context[:current_user]
end
end