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
نصب
- کلون مخزن
- وابستگی ها را نصب کنید:
npm install
- سرور توسعه را اجرا کنید:
npm run dev
- 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 آورده شده است:
-
تهیه کاربر: پس از ثبت نام ، کاربران در مجوز با ویژگی هایی مانند ثبت می شوند
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",
},
],
});
-
ثبت منابع: هنگامی که یک سابقه پزشکی جدید ایجاد می شود ، به عنوان یک ثبت می شود نمونه منابع با ویژگی هایی مانند
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,
},
});
-
بررسی مجوز:
- قبل از نشان دادن یا به روزرسانی یک رکورد ، ما با آن تماس می گیریم
permit.check(...)
- در صورت اجازه اجازه ، دسترسی به درآمد حاصل می شود.
- اگر هیچ کاربری مطابقت نداشته باشد (به عنوان مثال ، کاربران تازه ایجاد شده) ، ما به یک بررسی محلی RBAC+ABAC برای جلوگیری از دسترسی در حالی که هنوز سیاهههای مربوط به آن نشان داده شده است.
- قبل از نشان دادن یا به روزرسانی یک رکورد ، ما با آن تماس می گیریم
-
میزبان سیاست: 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 و داشبورد مجوز به ما کمک کرد تا نقش ها را مدیریت کنیم ، خط مشی بنویسیم و همه چیز را بدون نیاز به یک سیستم اجازه سفارشی آزمایش کنیم.
اعضای تیم
این پروژه توسط تیمی دو نفره ساخته شده است:
ما واقعاً از ساخت این پروژه لذت بردیم و در مورد سیستم های کنترل دسترسی مدرن چیزهای زیادی آموختیم. با تشکر از تیم مجوز .یو برای ارائه ابزارهای قدرتمند و اسناد عالی!