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 グループに属している場合だけ、リゾルバが結果を返します。