Access Control Models: ACL, RBAC, ABAC

In system design, access control is a critical mechanism to ensure data security and correct authorization of functionalities. Depending on the complexity of the system, the variety of user roles, and the flexibility needed in resource management, there are three common access control models: ACL (Access Control List), RBAC (Role-Based Access Control), and ABAC (Attribute-Based Access Control). Below is a brief comparison of these three models, outlining their design logic, characteristics, and application scenarios to help clarify the selection and implementation considerations.

ACL

Direct authorization, fine-grained, but difficult to manage

  • Design Logic: User → Resource + Operation

If a user has read and update permissions for the development department's file list, they can view all the data under that department and make changes to it.

RBAC

Simplified management, clear structure, but limited flexibility

  • Design Logic: Role → Resource + Operation; User is assigned to a role

If a user’s role is a department manager, they can perform CRUD operations on all resources within that department.

ABAC

Highest flexibility, dynamic condition evaluation based on the user's, resource's, and environment's attributes to determine authorization.
Some variants include ReBAC (Relationship-Based Access Control), LBAC (Label-Based Access Control).

  • Design Logic: Access is determined based on attributes.

If a user’s department attribute is "HR Department," the resource's attribute is "personnel data," and the current time is within working hours, access is granted.

Comparison Table

Item ACL (Access Control List) RBAC (Role-Based Access Control) ABAC (Attribute-Based Access Control)
📘 Authorization Target User → Resource Role → Resource User attributes, resource attributes, environment attributes
👤 User Binding Method User is directly granted access User is assigned a role User attributes are used to check access
🔄 Authorization Method Static (each rule is defined clearly) Static (role-based) Dynamic condition-based (using multiple attributes)
🧱 Database Design Simplicity Simple (but hard to scale) Moderate Complex (requires extra logic for attributes and rules)
⚙️ Flexibility / Detail Control High (per user and resource) Medium (role-level) Very high (can use any attribute condition)
📈 Maintenance Cost (Large Systems) High (hard to manage when users grow) Low to medium (if roles are well designed) High (complex rules and attributes need engine support)
🔐 Permission Sharing / Inheritance Low (granted per user) High (shared roles, hierarchical roles) High (attributes are reusable)
🛡️ Suitable Resource Scale Small (few users and resources) Medium to large (with stable role structure) Large and complex (many rules, multi-tenant)
🧠 Learning / Implementation Difficulty Low Low to medium High (requires abstract thinking, policy language like XACML or engines like OPA)
🧭 Suitable Use Cases Personal systems, sensitive data with fine control Enterprise backends, SaaS, shared platforms Banks, government, insurance, dynamic access control, zero-trust
🧩 Typical Examples Dropbox, Google Drive “share with someone” Internal company systems (e.g., Admin, Manager) Data classification access, policy-driven API Gateway
👮🏻‍♂️ Security High (fine control, but human error risk) Medium (depends on good role design) High (granular control, but needs accurate rules/attributes)
🏎️ Performance Decreases with scale (each access is checked) High (simple role lookup) Low (many attributes and rules to evaluate)
🎲 Standard Support None NIST RBAC Model XACML