CodeShot

کنترل دسترسی مبتنی بر نقش (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 استفاده کنید.