گائیڈز

اپنی ایپ میں Role-Based Access Control (RBAC) کیسے شامل کریں

Role-based access control شامل کرنے کے لیے ہر صارف کو ایک یا زیادہ کردار دیں (مثلاً admin، editor، viewer)، طے کریں کہ ہر کردار کون سے کام کر سکتا ہے، اور ہر درخواست کے لیے یہ اجازتیں سرور پر جانچیں، صرف بٹن چھپا کر نہیں۔ ساتھ ہی جانچیں کہ جس ریکارڈ تک رسائی ہو رہی ہے وہ صارف کے اکاؤنٹ یا ٹیم کا ہے۔ اپنے ڈیٹا بیس میں چند مقررہ کرداروں سے شروع کریں، اور جانچ کے لیے براہ راست کسی دوسرے صارف کے ڈیٹا تک پہنچنے کی کوشش کریں۔

Authentication بمقابلہ Authorisation

دو الفاظ جو اکثر خلط ملط ہو جاتے ہیں:

  • Authentication یہ ہے کہ آپ کون ہیں؟ — یعنی لاگ ان۔ دیکھیں اپنی ایپ میں لاگ ان کیسے شامل کریں۔
  • Authorisation یہ ہے کہ آپ کیا کر سکتے ہیں؟ — یعنی لاگ ان صارف کون سے صفحات، ریکارڈز اور کارروائیوں تک پہنچ سکتا ہے۔

RBAC authorisation کا سب سے عام طریقہ ہے۔ اس کی اہمیت یہ ہے: ستمبر 2026 تک، Broken Access Control، OWASP Top 10:2025 میں نمبر 1 پر ہے، یہ وہ وسیع پیمانے پر استعمال ہونے والی فہرست ہے جو ویب ایپلیکیشن کے سب سے سنگین سیکیورٹی خطرات بتاتی ہے۔ عام ناکامیاں یہ ہیں کہ صارف URL میں ID بدل کر دوسروں کے ریکارڈز پڑھ لیتے ہیں، یا عام صارفین صرف admin والے API راستوں کو کال کر لیتے ہیں۔

ایک ماڈل چنیں

ماڈلکیسے کام کرتا ہےکس کے لیے بہترنقصان
ایک role کالمusers.role = admin / memberدو یا تین کرداروں والی چھوٹی ایپسجب لوگوں کو مختلف جگہوں پر مختلف کردار چاہئیں تو الجھن ہو جاتی ہے
کردار + اجازتیںکردار نامی اجازتوں سے جڑے ہوتے ہیں (invoices.approve)؛ کوڈ اجازتیں جانچتا ہےایسی ایپس جن کے قواعد بڑھیں گےمزید ٹیبلز؛ اجازتوں کی فہرست برقرار رکھنی ہوتی ہے
فی ٹیم (multi-tenant) کرداررکنیت کا ٹیبل: صارف + تنظیم + کردارSaaS جہاں لوگ ٹیموں یا workspaces کا حصہ ہوںہر کوئری کو تنظیم تک محدود کرنا ہوگا
Attribute یا relationship پر مبنیریکارڈ کی خصوصیات پر قواعد ("مصنف اپنی پوسٹ میں ترمیم کر سکتا ہے") یا تعلقات پر (شیئر شدہ)دستاویزات، شیئرنگ، پیچیدہ ورک فلوسمجھنا مشکل؛ ایک مخصوص لائبریری یا سروس پر غور کریں
Auth فراہم کنندہ کے کردارآپ کا لاگ ان فراہم کنندہ کرداروں یا تنظیمی رکنیت کو محفوظ کرتا ہےایسی ایپس جو پہلے ہی ہوسٹڈ auth فراہم کنندہ استعمال کر رہی ہیںاس فراہم کنندہ سے جڑا ہوا؛ پھر بھی آپ کے سرور پر نافذ کریں

عملی طور پر زیادہ تر ایپس دو چیزوں کو ملاتی ہیں: کردار یہ طے کرنے کے لیے کہ کوئی کس قسم کی کارروائی کر سکتا ہے، اور ملکیت یہ طے کرنے کے لیے کہ وہ کن ریکارڈز پر کر سکتا ہے۔ "editors پوسٹس میں ترمیم کر سکتے ہیں" ایک کردار کا قاعدہ ہے؛ "...اپنی workspace کی پوسٹس" ملکیت کا قاعدہ ہے۔ آپ کو دونوں چاہئیں۔

آپ کی سوچ سے کہیں زیادہ سادہ شروع کریں۔ admin، member اور viewer کافی ایپس کو پورا کر دیتے ہیں۔ بعد میں ایک کردار تقسیم کرنا، دس ایسے کرداروں کو الجھانے سے آسان ہے جنہیں کوئی سمجھتا نہ ہو۔

کوڈ لکھنے سے پہلے کردار طے کریں

پہلے سادہ زبان میں ایک اجازتوں کا ٹیبل لکھیں۔ یہ AI کے لیے تفصیل کا کام بھی دیتا ہے اور آپ کے جانچ کے منصوبے کا بھی:

کارروائیOwnerAdminMemberViewer
ٹیم کے پروجیکٹس دیکھیں✓✓✓✓
پروجیکٹس بنائیں اور ترمیم کریں✓✓✓
پروجیکٹس حذف کریں✓✓
لوگوں کو مدعو کریں اور ہٹائیں✓✓
کردار بدلیں✓
بلنگ✓

خاص صورتیں بھی طے کریں: کیا آخری owner چھوڑ سکتا ہے؟ کیا admin owner کو ہٹا سکتا ہے؟ ہٹائے گئے صارف کو کیا نظر آتا ہے؟

مرحلہ وار طریقہ

1. پہلے کام کرنے والا لاگ ان رکھیں

RBAC auth کے اوپر کھڑا ہوتا ہے۔ سرور کو ہر درخواست کرنے والے کی شناخت قابلِ اعتماد طریقے سے معلوم ہونی چاہیے، session یا تصدیق شدہ token سے، کبھی براؤزر کی بھیجی ہوئی request body میں موجود user ID سے نہیں۔

2. کردار ڈیٹا بیس میں محفوظ کریں

ایک ٹیم والی ایپ کے لیے، صارفین پر role کالم ٹھیک ہے۔ ٹیموں کے لیے، رکنیت کا ٹیبل استعمال کریں:

create table memberships (
  user_id uuid references users(id),
  organization_id uuid references organizations(id),
  role text not null check (role in ('owner','admin','member','viewer')),
  primary key (user_id, organization_id)
);

کسی صارف کو عام پروفائل اپڈیٹ کے ذریعے اپنا کردار خود بدلنے نہ دیں۔ کردار کی تبدیلیاں ایک مخصوص، اجازت جانچنے والے endpoint سے گزریں۔

3. اجازتیں سرور پر، ایک جگہ جانچیں

ایک ہیلپر لکھیں، جیسے can(user, 'projects.delete', project)، اور اسے ہر API راستے، سرور ایکشن اور بیک گراؤنڈ ٹاسک میں کال کریں جو ڈیٹا پڑھے یا بدلے۔ ایک مرکزی فنکشن کا جائزہ اور جانچ آسان ہے، کوڈ میں بکھری ہوئی جانچوں کے مقابلے میں۔ Deny by default: اگر کوئی قاعدہ کسی کارروائی کی اجازت نہ دے تو وہ مسترد ہو۔

4. ہر کوئری کا دائرہ طے کریں

ٹیم کے ڈیٹا کی ہر کوئری میں ٹیم شامل ہونی چاہیے: where organization_id = :currentOrg، صرف where id = :id نہیں۔ یہی روکتا ہے کہ کوئی /projects/123 کو /projects/124 میں بدل کر کسی اور کمپنی کا پروجیکٹ دیکھ لے۔ دوسری ٹیموں کے ریکارڈز کے لیے "forbidden" کے بجائے "not found" واپس کریں، تاکہ ان کے موجود ہونے کا پتہ نہ چلے۔

5. جہاں ضروری ہو، ڈیٹا بیس کی سطح پر تحفظ شامل کریں

Postgres row-level security (RLS) ڈیٹا بیس کو طے کرنے دیتی ہے کہ ہر صارف کون سی قطاریں دیکھ سکتا ہے۔ یہ لازمی ہے اگر براؤزر ڈیٹا بیس سے براہ راست بات کرتا ہو (جیسا کہ کچھ ہوسٹڈ بیک اینڈز میں)، اور ورنہ حساس ٹیبلز کے لیے ایک مفید دوسری تہہ ہے۔

6. انٹرفیس میں کردار دکھائیں

اب وہ چیزیں چھپائیں یا غیر فعال کریں جو صارف نہیں کر سکتا، تاکہ ایپ الجھن پیدا نہ کرے۔ یہ صرف استعمال میں آسانی کے لیے ہے؛ حفاظت سرور کی جانچیں کرتی ہیں۔

7. حساس کارروائیوں کا ریکارڈ رکھیں

ریکارڈ کریں کہ کردار کس نے بدلے، ڈیٹا کس نے حذف کیا یا ریکارڈز کس نے ایکسپورٹ کیے، اور کب۔ آڈٹ لاگ سپورٹ کے سوالات اور واقعات میں مدد دیتا ہے۔

8. حملہ آور کی طرح جانچیں

ہر کردار سے لاگ ان کریں اور اجازتوں کے ٹیبل کی ہر کارروائی آزمائیں۔ پھر وہ چیزیں آزمائیں جو نہیں ہونی چاہئیں: viewer کے طور پر admin API راستوں کو کال کریں، URLs اور درخواستوں میں IDs بدلیں، آخری owner کے طور پر خود کو ہٹائیں۔ قواعد طے ہونے کے بعد اجازتوں کے ٹیبل کے لیے خودکار ٹیسٹ لکھنا فائدہ مند ہے۔

کام کرنے والے پرامپٹس

Role-based access control شامل کریں۔ ہر تنظیم کے کردار: owner، admin، member، viewer، جو memberships ٹیبل میں محفوظ ہوں۔ اجازتیں اس ٹیبل میں ہیں: [اپنا ٹیبل یہاں چسپاں کریں]۔ ایک سرور سائیڈ can(user, action, resource) ہیلپر بنائیں، deny by default، اور اسے ہر API راستے میں استعمال کریں۔ ہر کوئری کو organization_id کے ذریعے محدود کریں۔ UI میں وہ کارروائیاں چھپائیں جو صارف نہیں کر سکتا، لیکن حفاظت کے لیے کبھی اس پر بھروسا نہ کریں۔

اس ایپ کے ہر API راستے اور سرور فنکشن کا جائزہ لیں۔ ہر ایک کے لیے بتائیں کہ وہ کون سا ڈیٹا پڑھتا یا بدلتا ہے، کیا وہ چیک کرتا ہے کہ صارف لاگ ان ہے، کیا وہ اس کا کردار جانچتا ہے، اور کیا وہ کوئری کو اس کی تنظیم تک محدود کرتا ہے۔ جہاں جانچ غائب ہو وہاں اسے درست کریں، اور مجھے فہرست دکھائیں۔

ایک صرف-admin والا /admin صفحہ شامل کریں جہاں owner ارکان کے کردار بدل سکے۔ آخری owner کو ہٹانے یا اس کا درجہ گھٹانے سے روکیں، ہر کردار کی تبدیلی کا ریکارڈ رکھیں کہ کس نے اور کب کیا، اور یقینی بنائیں کہ کردار بدلنے والا endpoint owner کے علاوہ کسی کو قبول نہ کرے۔

عام غلطیاں

  • صرف فرنٹ اینڈ پر کردار جانچنا۔ API پھر بھی ہر اس شخص کے لیے کھلی ہے جو اسے کال کرے۔
  • کلائنٹ کے بھیجے ہوئے IDs پر بھروسا کرنا — request body میں userId یا role سیشن کے بجائے۔
  • بغیر دائرے کی کوئریاں جو صرف ریکارڈ ID سے لاتی ہیں۔
  • صفحات پر کردار جانچنا مگر API راستوں، ایکسپورٹس، فائل ڈاؤن لوڈز یا webhooks پر نہیں۔
  • کوڈ میں لکھا ہوا email پتہ بطور admin (if email === 'me@...')، جو بھولنا آسان اور بدلنا مشکل ہے۔
  • بہت جلد بہت سارے کردار، جنہیں چھ ماہ بعد کوئی سمجھا نہ سکے۔
  • پرانے sessions: ایک درجہ گھٹایا گیا صارف لاگ آؤٹ ہونے تک admin حقوق رکھتا ہے۔ حساس کارروائیوں پر کردار ڈیٹا بیس سے جانچیں، یا انہیں تازہ کریں۔

RBAC چیک لسٹ

  • سادہ زبان میں اجازتوں کا ٹیبل لکھا گیا، خاص صورتیں طے ہوئیں
  • سرور صارف کو session سے جانتا ہے، کبھی request data سے نہیں
  • کردار ڈیٹا بیس میں محفوظ ہیں؛ صارف خود انہیں نہیں بدل سکتے
  • ایک مرکزی اجازت جانچ، deny by default، ہر راستے میں استعمال
  • ہر کوئری صارف کی تنظیم یا ملکیت تک محدود
  • جہاں براؤزر ڈیٹا بیس تک پہنچتا ہے وہاں row-level security
  • UI وہ چیزیں چھپاتا ہے جو صارف نہیں کر سکتا (صرف استعمال میں آسانی کے لیے)
  • حساس کارروائیوں کا ریکارڈ رکھا جاتا ہے
  • ہر کردار کی جانچ ہوئی، بشمول براہ راست API کالز اور بدلے ہوئے IDs

رسائی کنٹرول محفوظ ایپ کی لمبی فہرست کا ایک حصہ ہے؛ AI سے بنی ایپس کے لیے سیکیورٹی چیک لسٹ باقی حصے بیان کرتی ہے۔ اگر آپ اپنے اسٹاف کے لیے ٹول بنا رہے ہیں تو اندرونی ٹول کیسے بنائیں دکھاتی ہے کہ کردار کہاں فٹ ہوتے ہیں۔

Mythex پر RBAC

Mythex آپ کی ایپ کے صارفین کے لیے کوئی بلٹ اِن لاگ ان یا کردار کا نظام فراہم نہیں کرتا۔ آپ ایک auth لائبریری یا فراہم کنندہ چنتے ہیں اور کردار بیان کرتے ہیں، اور ایجنٹ انہیں آپ کے کوڈ اور پروجیکٹ کے Postgres ڈیٹا بیس میں جوڑ دیتا ہے (ایپ میں لاگ ان شامل کریں)۔ Mythex کے اپنے ورک اسپیس کے کردار، جیسے Owner اور Member، یہ کنٹرول کرتے ہیں کہ کون آپ کے Mythex پروجیکٹس میں ترمیم کر سکتا ہے، نہ کہ کون آپ کی پبلش شدہ ایپ استعمال کر سکتا ہے۔ بنانے سے پہلے Plan mode میں اجازتوں کے ٹیبل پر متفق ہوں، پھر اوپر دیا گیا جائزہ پرامپٹ استعمال کریں اور پبلش کرنے سے پہلے Preview میں ہر کردار کی جانچ کریں۔ docs کے سیکیورٹی پرامپٹس ایک مفید اگلا قدم ہیں۔

سوالات

Role-based access control کیا ہے؟

Role-based access control (RBAC) طے کرتا ہے کہ ہر صارف اپنے کرداروں کی بنیاد پر کیا کر سکتا ہے، جیسے admin، editor یا viewer۔ اجازتیں افراد کے بجائے کرداروں کے ساتھ جڑی ہوتی ہیں، اس لیے کسی کی رسائی بدلنے کے لیے صرف اس کا کردار بدلنا کافی ہے۔

Authentication اور authorisation میں کیا فرق ہے؟

Authentication یہ جانچتا ہے کہ کوئی شخص کون ہے، عموماً لاگ ان کے ذریعے۔ Authorisation طے کرتا ہے کہ وہ لاگ ان شخص کیا دیکھ اور کر سکتا ہے۔ RBAC authorisation کرنے کا ایک طریقہ ہے۔

کیا انٹرفیس میں بٹن چھپانا رسائی روکنے کے لیے کافی ہے؟

نہیں۔ کوئی بھی آپ کی API کو براہ راست کال کر سکتا ہے، اس لیے بٹن چھپانے سے صرف یہ بدلتا ہے کہ لوگ کیا دیکھتے ہیں۔ ڈیٹا پڑھنے یا بدلنے والی ہر درخواست کو سرور پر صارف کے کردار اور ریکارڈ کی ملکیت کے خلاف جانچنا لازمی ہے۔

کیا مجھے Postgres row-level security استعمال کرنی چاہیے؟

Row-level security ڈیٹا بیس کو خود طے کرنے دیتی ہے کہ ہر صارف کون سی قطاریں پڑھ یا لکھ سکتا ہے، جو ایک مضبوط حفاظتی جال ہے، خاص طور پر جب فرنٹ اینڈ براہ راست ڈیٹا بیس سے بات کرتا ہو۔ اس میں پیچیدگی آتی ہے، اس لیے بہت سی ایپس اجازتیں سرور کے کوڈ میں نافذ کرتی ہیں اور حساس ٹیبلز کے لیے row-level security کو اضافی تہہ کے طور پر استعمال کرتی ہیں۔

Mythex · Pricing · AI کے ساتھ کچھ بھی بنائیں · ویب سائٹ اور ایپ ٹیمپلیٹس · Mythex کا موازنہ · AI سے ایپ بنانے کی اصطلاحات · AI سے ایپ بنانے کے مفت ٹولز · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)