RBAC vs ABAC: Implementasi — Auth

Dua model otorisasi paling populer: RBAC (Role-Based Access Control) dan ABAC (Attribute-Based Access Control). Memahami kapan memakai yang mana adalah kunci de

Dua model otorisasi paling populer: RBAC (Role-Based Access Control) dan ABAC (Attribute-Based Access Control). Memahami kapan memakai yang mana adalah kunci desain sistem yang scalable.

RBAC — Role-Based Access Control

Akses ditentukan berdasarkan peran (role) yang dimiliki user. Sederhana dan mudah dikelola.

const permissions = {
  admin:  ["file:read", "file:write", "file:delete", "user:manage"],
  editor: ["file:read", "file:write"],
  viewer: ["file:read"],
};

function checkRBAC(role, action) {
  return permissions[role]?.includes(action) ?? false;
}

checkRBAC("editor", "file:write");  // true
checkRBAC("viewer", "file:delete"); // false

Kelebihan RBAC: mudah dipahami, mudah di-audit, performa tinggi. Kekurangan: tidak fleksibel untuk kondisi kompleks ("editor dari departemen HR bisa baca file confidential").

ABAC — Attribute-Based Access Control

Akses ditentukan berdasarkan atribut user, atribut resource, dan konteks lingkungan. Sangat fleksibel.

function checkABAC(userAttrs, resourceAttrs, action, envAttrs) {
  // Policy: hanya karyawan HR yang boleh baca file confidential
  if (action === "file:read" && resourceAttrs.classification === "confidential") {
    if (userAttrs.department !== "hr") return false;
  }

  // Policy: hanya bisa akses di jam kerja (08:00–17:00)
  const hour = envAttrs.currentHour;
  if (resourceAttrs.requireOfficeHours && (hour < 8 || hour > 17)) {
    return false;
  }

  // Policy: role dasar
  const rolePerms = { admin: ["file:read", "file:write"], editor: ["file:read"] };
  return rolePerms[userAttrs.role]?.includes(action) ?? false;
}

// Contoh penggunaan:
checkABAC(
  { role: "editor", department: "hr" },
  { classification: "confidential", requireOfficeHours: true },
  "file:read",
  { currentHour: 10 }
); // true — editor HR, jam 10, file confidential

checkABAC(
  { role: "editor", department: "engineering" },
  { classification: "confidential", requireOfficeHours: false },
  "file:read",
  { currentHour: 14 }
); // false — bukan dari departemen HR

Perbandingan:

Aspek RBAC ABAC
Kompleksitas Rendah Tinggi
Fleksibilitas Terbatas Sangat tinggi
Performa Sangat cepat Lebih lambat
Kasus pakai App umum Enterprise, multi-tenant
Audit Mudah Kompleks

Kapan memilih:

PBAC (Policy-Based Access Control) adalah varian ABAC modern yang menggunakan bahasa kebijakan terstruktur (seperti OPA/Rego atau Cedar dari AWS).