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:
- Pakai RBAC untuk: aplikasi standar dengan peran yang jelas (admin, editor, viewer)
- Pakai ABAC untuk: enterprise dengan kebijakan kompleks, multi-tenant SaaS, compliance ketat (HIPAA, SOC2)
- Hybrid: RBAC sebagai layer pertama, ABAC untuk fine-grained control pada resource sensitif
PBAC (Policy-Based Access Control) adalah varian ABAC modern yang menggunakan bahasa kebijakan terstruktur (seperti OPA/Rego atau Cedar dari AWS).