RBAC مخفف Role-Based Access Control است و معادل فارسی دقیق آن «کنترل دسترسی مبتنی بر نقش» است. در این روش مجوزهایی مانند مشاهده گزارش یا بازپرداخت سفارش به نقش نسبت داده می‌شود و کاربران نقش می‌گیرند.

نقشمشاهده سفارشتغییر قیمتبازپرداخت
پشتیبانمجازغیرمجازغیرمجاز
مدیر فروشمجازمجازمجاز با کنترل اضافی
مشتریفقط سفارش خودغیرمجازغیرمجاز
ROLE_PERMISSIONS = {
    "support": {"orders:read"},
    "manager": {"orders:read", "prices:write"},
}
def can(user_role: str, permission: str) -> bool:
    return permission in ROLE_PERMISSIONS.get(user_role, set())

RBAC به خودی خود بررسی مالکیت رکورد را حل نمی‌کند. برای مثال مشتری با مجوز orders:read فقط باید سفارش‌های متعلق به خودش را ببیند. ممکن است سیستم علاوه بر RBAC از ACL یا ABAC نیز استفاده کند.

تفاوت مفاهیم

ACL فهرست مجوزهای یک منبع را نگه می‌دارد، RBAC اجازه‌ها را به نقش متصل می‌کند. می‌توان هر دو را با سیاست‌های آبجکتمحور ترکیب کرد.

اصطلاحات مرتبط: ای‌سی‌ال، مجوزدهی، احراز هویت، ارجاع مستقیم ناامن به آبجکت.