限制Strapi中属于所有者的Graphql结果

限制Strapi中属于所有者的Graphql结果,graphql,strapi,Graphql,Strapi,我使用下面这样一个简单的Strapi策略来限制只属于所有者的REST结果,这在下面的链接中有记录 现在,我想对Graphql结果执行相同的操作,但它似乎不适用于相同的代码,因为“ctx.query”未定义。我已经尝试查看了所有请求API,但它们似乎都不适用于Graphql查询。URL以“”结尾,“ctx.request.query”为空[] 为什么在搜索graphQL问题时要查看REST文档?根本没有url查询解析 所有者角色(权限)可以使用策略进行检查-如前所述 以下部分包含杂项权限/自定义

我使用下面这样一个简单的Strapi策略来限制只属于所有者的REST结果,这在下面的链接中有记录

现在,我想对Graphql结果执行相同的操作,但它似乎不适用于相同的代码,因为“ctx.query”未定义。我已经尝试查看了所有请求API,但它们似乎都不适用于Graphql查询。URL以“”结尾,“ctx.request.query”为空[]


为什么在搜索graphQL问题时要查看REST文档?根本没有url查询解析

所有者角色(权限)可以使用策略进行检查-如前所述


以下部分包含杂项权限/自定义的示例-解析程序有一个
上下文
参数。用户数据应该(未选中)在
context.state.User

中可用,以下是我为解决该问题所做的:

覆盖
api/activity/config/Schema.GraphQl

module.exports = {
    definition: ``,
    query: `
        notifications(sort: String, limit: Int, start: Int, where: JSON): [Activity]
    `,
    type: {},
    resolver: {
        Query: {
            notifications: {
                description: 'Return the auth user notifications',
                policies: ['plugins.users-permissions.permissions'],
                resolver: 'Activity.findNotifications'
            },
        },
    },
};
api/activity/controllers/activity.js

module.exports = {

    findNotifications(ctx) {

        ctx.query = { ...ctx.query, owner: ctx.state.user.id }

        if (ctx.query._q) {
            return strapi.services.activity.search(ctx.query);
        }
        return strapi.services.activity.find(ctx.query);
    },
}
在控制器中,您获得查询并添加所有者id筛选器。
希望有帮助。

context.state.user有我的用户信息,但我需要更改graphql的搜索查询,以便过滤返回的结果。如何实现这一点?链接中的ISOOwner策略在触发REST查询之前更新了REST查询,但不能在graphQL上应用相同的策略。您可以使用自定义解析器(下一个示例)-修改示例的变异部分(查询部分为硬编码)中使用的“where”或在返回之前过滤结果。我正在查看第节中的示例“对查询应用权限”。似乎我可以更改“resolver:(obj,options,context)=>{}”中的选项来修改查询,但遇到错误“您的过滤器包含一个字段‘where’,该字段既不出现在您的模型定义上,也不出现在它的关系上。”“。您需要在模型中有一个
所有者
字段,以便所有者对其进行筛选-然后您可以使用
其中:{owner:context.state.user…}
module.exports = {

    findNotifications(ctx) {

        ctx.query = { ...ctx.query, owner: ctx.state.user.id }

        if (ctx.query._q) {
            return strapi.services.activity.search(ctx.query);
        }
        return strapi.services.activity.find(ctx.query);
    },
}