برنامه نویسی

MedRecord-سوابق پزشکی را با کنترل دسترسی ریز دانه ایمن کنید

این یک ارسال برای مجوز است. چالش مجوز: مجوزها دوباره تعریف شده اند

آنچه ما ساختیم

مدرک یک سیستم مدیریت سوابق پزشکی مدرن و مدرن است که به پزشکان و بیماران با دسترسی ایمن به داده های بهداشتی در حالی که به مدیران نظارت کامل می دهد ، توانمند می کند. ما با مشکل روبرو شدیم کنترل دسترسی به داده ها در مراقبت های بهداشتی – اطمینان از اینکه فقط کاربران مجاز می توانند سوابق پزشکی حساس را بخوانند ، به روز کنند یا مدیریت کنند.

با permit.io، ما کنترل دسترسی مبتنی بر ویژگی (ABAC) و کنترل دسترسی مبتنی بر نقش (RBAC) را اجرا کردیم ،

  • سرپرست برای مدیریت کل سیستم
  • پزشک می تواند همه سوابق را مشاهده کند اما فقط بیماران اختصاص داده شده آنها را به روز می کند
  • بیماران برای مشاهده فقط سوابق شخصی آنها

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

نسخه آزمایشی

🔗 نسخه ی نمایشی زنده: نسخه ی نمایشی زنده https://medrecord.vercel.app

repo پروژه

🔗 Github – Walityebayo/MedRecord

یک برنامه مدیریت سوابق پزشکی کامل که با Next.JS ، MongoDB و Permit.io برای کنترل دسترسی مبتنی بر نقش ساخته شده است.

ویژگی

  • کنترل دسترسی مبتنی بر نقش: سرپرست ، پزشک و نقش بیمار با مجوزهای مختلف
  • ادغام مونگود: ذخیره سازی داده های مداوم با MongoDB
  • بارگذاری پرونده: آپلود و مدیریت اسناد پزشکی با استفاده از Vercel Blob
  • جستجوی پیشرفته: سوابق را بر اساس تاریخ ، پزشک ، بیمار و موارد دیگر فیلتر کنید
  • طراحی پاسخگو: روی دستگاه های دسک تاپ و تلفن همراه کار می کند
  • UI مدرن: رابط کاربری با یک ظاهر طراحی شده شیب

دستورالعمل راه اندازی

پیش نیازهای

  • node.js 18+ و npm
  • پایگاه داده MongoDB (محلی یا اطلس)
  • حساب Vercel (برای ذخیره سازی حباب)
  • ancount.io Account

متغیرهای محیط

ایجاد a .env.local پرونده در فهرست root با متغیرهای زیر:

# MongoDB
MONGODB_URI=your_mongodb_connection_string

# Authentication
JWT_SECRET=your_jwt_secret_key

# Permit.io
PERMIT_API_KEY=your_permit_api_key

# Vercel Blob
BLOB_READ_WRITE_TOKEN=your_vercel_blob_token

نصب

  1. کلون مخزن
  2. وابستگی ها را نصب کنید:
npm install
حالت تمام صفحه را وارد کنید

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

  1. سرور توسعه را اجرا کنید:
npm run dev
حالت تمام صفحه را وارد کنید

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

  1. http: // localhost: 2500 را در مرورگر خود باز کنید

آزمایش نقش های مختلف

پشته فنی: next.js ، tailwindcss ، mongodb (mongoose) ، permit.io ، docker ، render

ورود

ورود

ضبط ایجاد کنید
ضبط ایجاد کنید

داشباورد
داشبورد

جزئیات ضبط
جزئیات ضبط

سوابق ویرایش
سوابق ویرایش

سفر ما

این پروژه توسط یک تیم کوچک اما اختصاصی از توسعه دهندگان ساخته شده است: walidadebayo (جلوی/پس زمینه) ، Volde (جلو/پس زمینه). چالش اصلی ما ادغام بود pdp prit.io (نقطه تصمیم گیری سیاست) در یک محیط تولید مانند.

چالش هایی که با آن روبرو شدیم

  • میزبانی PDP: در ابتدا ، ما PDP مجوز را به صورت محلی اجرا کردیم ، اما این مقیاس نبود. ما یاد گرفتیم که چگونه آن را با استفاده از docker کانتینر کنیم و آن را مستقر کنیم ارائه دادنبشر
  • خطای 422 از مجوز: ما به دلیل منابع مفقود شده و کاربران با خطاهای مجوز مکرر از مجوز (به ویژه کد 422) روبرو شدیم. ما این کار را با ثبت برنامه ای همه کاربران ، منابع و ویژگی ها در هنگام تنظیم برنامه حل کردیم.
  • منطق چابک ریز ریز: ما یک عملکرد Fallback RBAC+Abac را در Node.js ایجاد کردیم تا تصمیمات مجوز را در صورت یافتن هیچ کاربری مطابق با آنها مکمل کنیم.

یادگیری کلیدی

  • چگونه Containerise یک PDP بدون گره فقط با استفاده از تصویر docker مجوز
  • نحوه تعریف و مدیریت انواع منابع ، اقدامات ، نقش هاوت روابط در مجوز
  • نحوه نوشتن و تست سیاست ها برای هر دو سناریو RBAC و ABAC
  • نحوه ورود و اشکال زدایی شکست های مجوز با استفاده از پاسخ های SDK و API مجوز

با استفاده از مجوز. برای مجوز

در اینجا نحوه ادغام مجوز در MedRecord آورده شده است:

  1. تهیه کاربر: پس از ثبت نام ، کاربران در مجوز با ویژگی هایی مانند ثبت می شوند roleبا nameوت emailبشر نقش هایی مانند doctorبا patientوت admin با استفاده از SDK مجوز اختصاص داده می شود.
    await permit.api.createUser({
      key: user.id.toString(),
      email: user.email,
      first_name: user.name.split(" ")[0],
      last_name: user.name.split(" ").slice(1).join(" "),
      attributes: {
        role,
      },
      role_assignments: [
        {
          role: user.role,
          resource_instance: "medical_record",
          tenant: "default",
        },
      ],
    });
حالت تمام صفحه را وارد کنید

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

  1. ثبت منابع: هنگامی که یک سابقه پزشکی جدید ایجاد می شود ، به عنوان یک ثبت می شود نمونه منابع با ویژگی هایی مانند doctor_name وت patient_name، بنابراین سیاست های ABAC می توانند به آنها مراجعه کنند.

منابع

const resourceDefinition = {
  key: "medical_record",
  name: "Medical Record",
  description: "A patient’s medical record",
  actions: {
    read: { name: "Read", description: "Read the record" },
    update: { name: "Update", description: "Update the record" },
    delete: { name: "Delete", description: "Delete the record" },
    create: { name: "Create", description: "Create a new record" },
  },
  attributes: {
    doctor_id: { type: "string", description: "ID of the assigned doctor" },
    patient_id: { type: "string", description: "ID of the patient" },
  },
  roles: {
    admin: {
      permissions: ["read", "update", "delete", "create"],
    },
    doctor: {
      permissions: ["read", "update"],
    },
    patient: {
      permissions: ["read"],
    },
  },
};

const response = await permit.api.createResource(resourceDefinition);

 await permit.api.resourceInstances.create({
          key: record._id.toString(),
          resource: "medical_record",
          attributes: {
            patient_name: record.patient_name,
            doctor_name: record.doctor_name,
          },
        });
حالت تمام صفحه را وارد کنید

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

  1. بررسی مجوز:

    • قبل از نشان دادن یا به روزرسانی یک رکورد ، ما با آن تماس می گیریم permit.check(...)
    • در صورت اجازه اجازه ، دسترسی به درآمد حاصل می شود.
    • اگر هیچ کاربری مطابقت نداشته باشد (به عنوان مثال ، کاربران تازه ایجاد شده) ، ما به یک بررسی محلی RBAC+ABAC برای جلوگیری از دسترسی در حالی که هنوز سیاهههای مربوط به آن نشان داده شده است.
  2. میزبان سیاست: PDP از طریق Docker کانتینر می شود و به ارائه دادن، قرار دادن آن از طریق یک نقطه پایانی امن که برنامه ما از آن استفاده می کند.

// Example Permit Check
const allowed = await permit.check({
  user: currentUserId,
  action: "update",
  resource: {
    type: "medical_record",
    key: recordId,
    attributes: {
      doctor_name: "Dr. Sarah Johnson",
      patient_name: "Emily Davis"
    }
  },
})
حالت تمام صفحه را وارد کنید

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

CLI و داشبورد مجوز به ما کمک کرد تا نقش ها را مدیریت کنیم ، خط مشی بنویسیم و همه چیز را بدون نیاز به یک سیستم اجازه سفارشی آزمایش کنیم.

اعضای تیم

این پروژه توسط تیمی دو نفره ساخته شده است:

ما واقعاً از ساخت این پروژه لذت بردیم و در مورد سیستم های کنترل دسترسی مدرن چیزهای زیادی آموختیم. با تشکر از تیم مجوز .یو برای ارائه ابزارهای قدرتمند و اسناد عالی!

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

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

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

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