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

时间:2019-06-09 10:06:26

标签: graphql strapi

我正在使用一个简单的Strapi策略(如下所示)来限制仅属于所有者的REST结果,该结果记录在以下链接中。

https://github.com/strapi/strapi/issues/624

module.exports = async (ctx, next) => {
  const { id, role } = ctx.state.user;
  if(role !== 'administrator'){
    ctx.query.owner = id;
  }
  await next();
};

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

https://strapi.io/documentation/3.0.0-beta.x/guides/requests.html#api-reference

2 个答案:

答案 0 :(得分:0)

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

所有者角色(权限)可以使用政策进行检查-其描述为here

以下各节包含其他权限/自定义的示例-解析程序具有context参数。用户数据应该(未检查)在context.state.user上。

答案 1 :(得分:0)

这是我为解决该问题所做的事情:

覆盖api/activity/config/schema.graphql中的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过滤器。 希望对您有所帮助。