کنترل دسترسی مبتنی بر نقش (RBAC) در مقابل کنترل دسترسی مبتنی بر ویژگی (ABAC)
RBAC دسترسی را بر اساس نقش ثابت کاربر (مثل Admin، Editor) تعیین میکند و ساده و قابل فهم است، در حالی که ABAC دسترسی را بر اساس ترکیبی از ویژگیهای پویا (کاربر، منبع، محیط، زمان) با قوانین منطقی تصمیم میگیرد و انعطافپذیری بسیار بیشتری دارد.
| ویژگی | کنترل دسترسی مبتنی بر نقش (RBAC) | کنترل دسترسی مبتنی بر ویژگی (ABAC) |
|---|---|---|
| مبنای تصمیم | نقش ثابت کاربر | ویژگیهای پویا و چندگانه |
| سادگی پیادهسازی | ساده | پیچیدهتر |
| انعطافپذیری | محدود | بسیار بالا |
کِی از کنترل دسترسی مبتنی بر نقش (RBAC) استفاده کنیم؟
وقتی تعداد نقشها محدود و ثابت است و قوانین دسترسی سادهاند، مثل «فقط ادمین میتواند کاربر حذف کند».
کِی از کنترل دسترسی مبتنی بر ویژگی (ABAC) استفاده کنیم؟
وقتی قوانین دسترسی پیچیده و وابسته به شرایط پویا هستند، مثل «کارمند فقط میتواند سند بخش خودش را در ساعات کاری از IP داخلی شرکت ویرایش کند».
مثال کنترل دسترسی مبتنی بر نقش (RBAC)
[Authorize(Roles = "Admin")]
public IActionResult DeleteUser(int id) { ... }
مثال کنترل دسترسی مبتنی بر ویژگی (ABAC)
// ABAC: تصمیم بر اساس چند ویژگی همزمان
if (user.Department == doc.Department
&& DateTime.Now.Hour is >= 8 and <= 18
&& request.IpAddress.IsInternal())
{
AllowAccess();
}
اشتباه رایج
اشتباه رایج تلاش برای پیادهسازی قوانین پیچیده و وابسته به شرایط با ساخت دهها نقش ریز در RBAC است (مثل «ادمین-فقط-صبح»)؛ این کار بهسرعت غیرقابل مدیریت میشود و نشانه آن است که باید به سمت ABAC حرکت کرد.
جمعبندی
برای سیستمهای ساده با تعداد نقش محدود از RBAC و برای قوانین دسترسی پیچیده و وابسته به شرایط پویا از ABAC استفاده کنید.
