# کنترل دسترسی وب‌اپ؛ مدیر، همکار و مالک رکورد را چطور بررسی کنیم؟

> ورود کاربر فقط هویت او را مشخص می‌کند؛ مجوز تعیین می‌کند چه داده و عملی برای او مجاز است. برای یک CRM، نقش مدیر و همکار را کنار مالک هر رکورد تعریف کن، سپس همان سناریو را با دو حساب آزمایشی بررسی کن. پیام منع دسترسی در صفحه شاهد مفیدی است، اما بدون بررسی درخواست و پاسخ سرور، ممیزی امنیت کامل به حساب نمی‌آید.

- Published: 2026-10-17T17:09:19.457Z
- Updated: 2026-10-30T10:34:42.615Z
- Author: نیکان نورافکن

---
وقتی یک وب‌اپ با فرم ورود و پنل مدیر می‌بینی، ممکن است فکر کنی دسترسی‌ها تمام شده‌اند. سؤال مهم‌تر این است: همکار عادی دقیقاً کدام درخواست مشتری را می‌بیند و آیا می‌تواند اطلاعاتِ حساب دیگری را تغییر دهد؟ برای جواب، به یک جدول مجوز و دو حساب آزمایشی نیاز داری؛ شکل دکمه‌های ورود جواب این سؤال را نمی‌دهد.

در نمونهٔ CRM کُندا که در ۲۴ مهر ۱۴۰۵ بررسی کردیم، حساب همکار در بخش اعضا پیام منع دسترسی دید. از طرف دیگر، یک رکورد با مسئول مشخص در حساب مدیر وجود داشت ولی در حساب آزمایشی همان همکار دیده نشد. این دو مشاهده کنار هم مهم‌اند: بستن مسیر غیرمجاز کافی نیست؛ مسیر مجاز هم باید کار کند. این راهنما روش تعریف و بررسی همین تفاوت را توضیح می‌دهد، نه نتیجهٔ یک ممیزی امنیتی کامل.

## اول هویت، نقش و مالک را جدا بنویس

هویت می‌گوید کدام حساب وارد شده؛ نقش می‌گوید مدیر است یا همکار؛ مالکیت می‌گوید این رکورد به کدام حساب یا تیم مربوط است. در یک تیم خدماتی، همکار می‌تواند اجازهٔ دیدن مشتریان خودش را داشته باشد، اما مجاز به مدیریت اعضای تیم نباشد. اگر این سه مفهوم را در پرامپت به یک جملهٔ «ورود امن بساز» خلاصه کنی، تصمیم اصلی را مبهم گذاشته‌ای.

برای رکورد آزمایشی، یک مسئول مشخص انتخاب کن و از ابتدا بنویس انتظار داری چه کسی آن را ببیند. نام نمایشیِ مسئول هم همیشه شناسهٔ حساب نیست. اگر دو نفر نام یکسان داشته باشند یا نام حساب عوض شود، قواعد مالکیت نباید به متن روی کارت وابسته بمانند.

## جدول مجوز، قبل از جدول مشتریان

| عملیات | مدیر تیم | همکار مسئول | همکار دیگر | مهمان |
|---|---|---|---|---|
| دیدن مشتری نمونه | طبق سیاست تیم | بله | خیر | خیر |
| تغییر وضعیت مشتری | طبق سیاست تیم | اگر مجاز تعریف شده | خیر | خیر |
| تغییر مسئول | طبق سیاست تیم | فقط اگر صریحاً مجاز است | خیر | خیر |
| مدیریت اعضا | بله | خیر | خیر | خیر |

این جدول یک نمونهٔ سیاست است، نه الزام همهٔ CRMها. اگر همکاری مشترک می‌خواهی، همان را به‌صورت مشخص تعریف کن. مهم این است که یک خانهٔ نامعلوم، به مجوز ضمنی تبدیل نشود. تغییر نقش و تغییر مالک هم دو تصمیم متفاوت‌اند و باید جدا بررسی شوند.

## پنهان‌کردن منو را با اجرای مجوز یکی نگیر

در رابط، گزینهٔ مدیریت اعضا را برای همکار نشان نده تا کاربر به بن‌بست نخورد. اما همان عملیات باید در سرور هم محدود باشد. [OWASP](https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Cheat_Sheet.html) بر رد دسترسی به‌صورت پیش‌فرض و بررسی مجوز در هر درخواست تأکید می‌کند. صرفِ نمایش صفحهٔ خطا، محل اجرای این کنترل را ثابت نمی‌کند.

<figure><img src="/blog/images/build-app-without-coding/crm-staff-denied.webp" width="1440" height="657" alt="پیام منع دسترسی همکار در بخش اعضای نمونهٔ CRM" loading="lazy" /><figcaption>مشاهدهٔ رابط حساب آزمایشی؛ درخواست مستقیم سرور در این بررسی ممیزی نشده است.</figcaption></figure>

اگر قرار است بازبین فنی این بخش را تأیید کند، جدول عملیات و حساب‌های ساختگی را به او بده. هدف، آزمودن همان پروژه و دادهٔ آزمایشی با مجوز مالک است؛ برای این کار لازم نیست دادهٔ مشتری واقعی یا حساب فرد دیگری را وارد کنی.

<!-- konda-start -->

## دو کنترل لازم داری: مجاز و غیرمجاز

با حساب مدیر، رکوردی با برچسب روشن «آزمایشی» بساز. آن را به همکار الف نسبت بده. انتظار مجاز را بررسی کن: الف رکورد را می‌بیند و عملی را که در جدول مجاز است انجام می‌دهد. سپس با همکار ب همان منبع را بررسی کن؛ انتظار غیرمجاز این است که دادهٔ الف به او داده نشود. آخر، حالت مهمان را هم جدا ثبت کن.

اگر همهٔ حساب‌ها فهرست خالی ببینند، نمی‌توانی نتیجه بگیری جداسازی درست است. یک سامانهٔ ازکارافتاده هم می‌تواند هیچ داده‌ای نشان ندهد. به همین دلیل، نمونه‌ای که باید دیده شود به‌اندازهٔ نمونهٔ ممنوع مهم است. زمان، نقش و نتیجهٔ هر دو کنترل را در گزارش بنویس.

## اختلاف نمونهٔ CRM چه چیزی به ما یاد داد؟

در حساب مدیر، رکورد مربوط به مسئول «سارا» دیده شد؛ اما حساب آزمایشی همکار فهرست خالی داشت. این نتیجه برای تحویل کافی نبود. علت می‌تواند در نگاشت حساب، فیلتر فهرست یا سیاست مورد انتظار باشد؛ از تصویر نمی‌شود میان آن‌ها انتخاب کرد. در مقالهٔ اصلی هم ایراد را پنهان نکردیم و پرامپت اصلاح را اجراشده معرفی نکردیم.

<figure><img src="/blog/images/build-app-without-coding/crm-staff-empty.webp" width="1440" height="657" alt="فهرست خالی حساب همکار در CRM آزمایشی" loading="lazy" /><figcaption>مسیر مجاز هنوز نیاز به بررسی دارد؛ خالی‌بودن به معنی تأیید سیاست نیست.</figcaption></figure>

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

## پرامپت محدود برای تعریف دسترسی

> برای وب‌اپ خدماتی، مدیر بتواند اعضا و مسئول رکورد را مدیریت کند. همکار فقط درخواست‌های مجاز خودش را ببیند. هویت حساب از نشست معتبر بیاید؛ نقش و مالکیت در سمت سرور هم بررسی شوند. دادهٔ آزمایشیِ مشخص برای یک نتیجهٔ مجاز و یک نتیجهٔ ممنوع آماده کن. اگر بخشی متصل نیست، آن را آماده معرفی نکن. صفحات عمومی و ظاهر نامرتبط را تغییر نده.

این متن نقطهٔ شروع است. پیش از ارسال، اسم نقش‌ها و عملیات مجاز را با جدول خودت جایگزین کن. بعد از ویرایش هم فقط پیام ابزار را نخوان؛ دو کنترل قبلی را دوباره انجام بده. اگر ابزار تغییری اعمال نکرده یا بخش سرور هنوز متصل نیست، وضعیت را در برگهٔ تحویل باز نگه دار.

## پیش از دادهٔ واقعی، چه چیزی باید روشن باشد؟

ورود و خروج، دسترسی هر نقش، مالکیت رکورد، تغییر نقش و بازیابی داده را با سناریوی مشخص بررسی کن. پیام خطا هم نباید دادهٔ شخص دیگری را نشان دهد. دربارهٔ ثبت رویداد حساس و حذف دسترسی هم از بازبین فنی سؤال کن. این چک‌لیست جای ارزیابی امنیتی متناسب با حساسیت پروژه را نمی‌گیرد.

برای دیدن زمینهٔ مثال، [راهنمای ساخت اپ بدون کدنویسی](/blog/build-app-without-coding) را بخوان. اگر هنوز تفاوت محیط بررسی و تحویل عمومی برایت مبهم است، [پیش‌نمایش یا انتشار](/blog/ai-app-preview-vs-production) مرحلهٔ بعد را روشن می‌کند.


برای یک تمرین مشخص، [مسیر تیکتینگ از ثبت تا بازگشایی](https://kondaai.com/blog/build-ticketing-system-with-ai) را ببین؛ خواندن و تغییر همان شناسه را با نشست مالک، کارشناس مجاز و مشتری دیگر جدا بررسی کن.


## پرسش‌های متداول

### ورود با کنترل دسترسی چه فرقی دارد؟

ورود هویت حساب را مشخص می‌کند. کنترل دسترسی بررسی می‌کند همان حساب اجازهٔ خواندن یا تغییر یک منبع مشخص را دارد یا نه.

### آیا مخفی‌کردن صفحهٔ مدیریت کافی است؟

خیر. سرور باید مجوز را برای درخواست مربوط هم بررسی کند. پنهان‌کردن منو فقط بخشی از رابط است.

### اگر فهرست همکار خالی باشد یعنی امنیت درست است؟

نه لزوماً. ممکن است مجوز درست باشد یا نگاشت مسئول به حساب اشتباه شده باشد. با یک رکورد ساختگی که باید مجاز باشد، هر دو حالت مجاز و غیرمجاز را بررسی کن.

### آیا CRM این مقاله ممیزی امنیتی شده است؟

خیر. شواهد از بررسی رابط نمونهٔ موجودند. درخواست مستقیم API، جداسازی مستأجر و همهٔ عملیات حساس ممیزی نشده‌اند.



## منابع

- [راهنمای مجوزدهی OWASP](https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Cheat_Sheet.html) (2026)
- [مجوزها و مالکیت در منطق کسب‌وکار](https://cheatsheetseries.owasp.org/cheatsheets/Business_Logic_Security_Cheat_Sheet.html) (2026)

