メインコンテンツまでスキップ

GraphQL API の高度なポリシー

GraphQL API へのリクエストは、Strapi の ミドルウェアポリシー を通ります。リゾルバにポリシーを付けて、複雑な認可ルールを実装できます。

GraphQL のポリシーについては GraphQL プラグインの設定 も参照してください。

条件付きの表示件数

未認証ユーザーに返す件数を抑えるには、リゾルバの引数を書き換えるポリシーを書きます。

/src/policies/limit-public-results.ts
export default async (policyContext, config, { strapi }) => {
const { state, args } = policyContext;

if (!state.user) {
args.limit = 4; // 公開は最大 4 件
}

return true;
};

/config/policies.ts に登録し、リゾルバに適用します。

/config/policies.ts
export default {
'api::restaurant.restaurant': {
find: [ 'global::limit-public-results' ],
},
};

グループ所属の確認

policyContext.state.user を見てグループ所属を確認する例です。

/src/policies/is-group-member.ts
export default async ({ state }, config, { strapi }) => {
const userGroups = await strapi.query('plugin::users-permissions.group').findMany({
where: { users: { id: state.user.id } },
});
return userGroups.some(g => g.name === config.group);
};

次の設定でポリシーを使います。

/config/policies.ts
export default {
'api::restaurant.restaurant': {
find: [{ name: 'global::is-group-member', config: { group: 'editors' } }],
},
};

認証済みユーザーが editors グループに属している場合だけ、リゾルバが結果を返します。