برنامه نویسی

چگونه یک سرور GraphQL فقط خواندنی ایجاد کنیم

در Woovi، ما یک کنسول/پشت آفیس برای مدیریت تمام عملیات خود داریم. ما می خواهیم به همه توسعه دهندگان خود دسترسی داشته باشیم تا زندگی پشتیبانی آنها را آسان تر کنیم، اما نمی خواهیم امنیت خود را کاهش دهیم.
دسترسی کنسول ما مبتنی بر مجوز است، هر کاربر دارای نقش هایی است که به آنها امکان دسترسی به برخی ویژگی ها را می دهد.
اگر کاربر هیچ نقشی ندارد، می‌خواهیم مطمئن شویم که فقط می‌تواند داده‌ها را بخواند، اما نمی‌تواند هیچ داده‌ای را تغییر دهد.

استفاده از میان افزارهای GraphQL برای ایجاد یک API فقط خواندنی

GraphQL برخی متا اطلاعات را ارائه می دهد که در آن می توانیم بررسی کنیم که آیا درخواست یک پرس و جو یا جهش است و کدام جهش درخواست شده است.

ما یک میان افزار برای رهگیری یک عملیات GraphQL اضافه کردیم که بررسی می کند آیا درخواست یک جهش است و کاربر مجوز اجرای آنها را دارد.

کد زیر نشان داده شده است:

export const adminOnlyMutation =
  (allowListMutations: string[] = []) =>
  (
    root: any,
    args: { [argName: string]: any },
    context: GraphQLContext,
    info: GraphQLResolveInfo,
    next: () => void,
  ) => {
    const mutationType = info.schema.getMutationType();

    if (allowListMutations.includes(info.fieldName)) {
      return next();
    }

    if (!mutationType) {
      return next();
    }

    if (context?.user?.roles?.includes('ADMIN')) {
      return next();
    }

    const fields = info.returnType.getFields();

    if (fields.error && fields.error.type === GraphQLString) {
      return {
        error: context.t('User not allowed'),
      };
    }

    throw new Error(context.t('User not allowed'));
  };
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

استفاده

import { addMiddleware } from 'graphql-add-middleware';

export const allowListMutations = ['UserLogin'];

addMiddleware(schema, 'Mutation', adminOnlyMutation(allowListMutations));

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در نتیجه

میان افزار GraphQL یک راه قدرتمند برای اصلاح طرح واره GraphQL شما است.
ساختن یک API فقط خواندنی با استفاده از REST کار بیشتری را می طلبد، زیرا باید بسیاری از نقاط پایانی را مدیریت کنید.
می توانید این کار را در چند خط کد در GraphQL انجام دهید.


وای
Woovi یک استارت آپ است که خریداران را قادر می سازد هر طور که دوست دارند پرداخت کنند. برای ایجاد این امکان، Woovi راه حل های پرداخت فوری را برای بازرگانان برای پذیرش سفارشات ارائه می دهد.

اگر می خواهید با ما کار کنید، ما استخدام می کنیم!


عکس رومن کرافت در Unsplash

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا