如何限制JSONAPI::Resources中可通过include参数请求的关联模型
JSONAPI::Resources 限制include关联范围的实现方法
单资源自定义允许列表
直接在对应业务的资源类中调用allow_include方法,显式声明仅允许被include的关联字段即可,示例如下:
class PostResource < JSONAPI::Resource attributes :title, :content, :published_at # 关联声明 has_one :author has_many :comments has_many :ratings # 仅允许include author关联,其他关联请求会直接返回400错误 allow_include :author end
配置后如果发起?include=comments这类未授权的关联请求,接口会自动返回参数校验错误,无需额外编写业务校验代码。
嵌套关联的允许配置
如果需要支持嵌套include,比如允许?include=author.profile,直接将嵌套关联路径加入允许列表即可:
allow_include :author, 'author.profile'
全局默认关闭自动允许include
如果希望所有资源默认都不允许任何include,必须显式声明才能使用,可以修改JSONAPI::Resources的全局初始化配置:
打开config/initializers/jsonapi_resources.rb,添加如下配置:
JSONAPI.configure do |config| # 其他原有配置保留,新增这行 config.allow_include_by_default = false end
该配置开启后,所有资源的关联默认都不允许被include,只有在对应资源类中通过allow_include显式声明的关联才能被正常查询。
内容的提问来源于stack exchange,提问作者Babar
相关产品推荐
相关产品推荐

