MikroORM 7.2 اومد، حالا امنیت در سطح ردیف پستگرس رو مستقیم پشتیبانی میکنه
خلاصهٔ کاملتر
تو اکثر ORMها، جداسازی دادهی چند مستأجر (multi-tenancy) یعنی یادت نره تو هر کوئری یه شرط tenant_id = ؟ بذاری؛ فیلترها کمک میکنن ولی یه کوئری خام یا یه فیلتر خاموششده کافیه که این مرز بشکنه. پستگرس بیش از یه دههست قابلیت Row Level Security (RLS) داره که همین مرزو تو خود پایگاهداده میذاره، جایی که یادت رفتن معنی نداره.
تو نسخهی ۷.۲، سیاستهای RLS بخشی از متادیتای انتیتی شدن: مستقیم روی انتیتی تعریف میشن، schema generator میسازتشون و باهاشون دیف میگیره، و از pg_policies هم برشون میگردونه. مثلاً میشه رو یه انتیتی یه پالیسی گذاشت که فقط ردیفهایی رو نشون بده که tenant_idشون با یه متغیر session یکی باشه:
create policy "article_tenant" on "article"
using (tenant_id = current_setting('app.tenant')::uuid)چون این سیاستها به current_setting(...) وابستهن، MikroORM باید این مقدار رو هر بار به کانکشن برسونه؛ این کارو با یه «session context» روی EntityManager انجام میده. استراتژی پیشفرض transaction این مقدارو بعد از هر begin ست میکنه (زیر pgBouncer هم امنه)، استراتژی connection هم هر بار کانکشن از pool گرفته میشه مقدارو تنظیم میکنه. اگه تننسی رو با فیلتر انتیتی مدل کرده باشی، با فلگ rls: true رو همون فیلتر، هم فیلتر ORM هم پالیسی پایگاهداده از یه تعریف ساخته میشن.
طراحی این قابلیت fail-closedه: اگه بخوای session context رو وقتی implicitTransactions خاموشه ست کنی، خطا میده بهجای اینکه بذاره نوشتنها بدون تراکنش رد بشن. کنار RLS، این نسخه چند تغییر دیگه هم داره: گزینهی through برای رابطههای to-one که از طریق subquery حل میشن، بازسازی صفحهبندی cursor برای تایپهای سفارشی و کلیدهای مرتبسازی nullable، یه درایور جدید sql.js که یه playground زنده به داکیومنتها اضافه کرده، پارامترهای نامدار تو em.execute()، و پشتیبانی از await using.
نکات کلیدی:
- MikroORM 7.2 پشتیبانی بومی از Row Level Security پستگرس رو به متادیتای انتیتی اضافه کرده
- پالیسیها با command، roles و نوع permissive/restrictive قابل تنظیمن
- دو استراتژی transaction و connection برای رسوندن session context به کانکشن وجود داره
- فیلترهای انتیتی با فلگ rls: true میتونن همزمان پالیسی پایگاهداده هم بسازن
- تغییرات دیگه: گزینهی through، بازسازی cursor pagination، درایور sql.js، و پشتیبانی از await using




