advanced
RBAC, ABAC и ACL
Выбирайте access-control models по форме domain: roles для coarse permissions, attributes для contextual rules и ACLs для resource-specific grants.
Authentication доказывает кто; authorization — что можно делать с каким ресурсом.
| Модель | Единица | Лучше всего | |--------|---------|-------------| | RBAC | Roles → permissions | Admin panels, грубые тарифы | | ABAC | Attributes (user, resource, env) | Контекст («только owner», окна времени) | | ACL | Список grants на ресурс | Документы, общие папки |
if (!user.roles.includes('editor')) throw forbidden();
function canEdit(user, document) {
return document.ownerId === user.id || user.roles.includes('admin');
}
Гибриды часты: RBAC по умолчанию, ABAC для исключений. Policy читаема и тестируема — не размазанные `if` без модели.
На интервью: role explosion в RBAC; динамика в ABAC; стоимость sync ACL в масштабе.
Типовые ошибки: роли только в UI; superuser вместо permissions; authorization после fetch (IDOR).
Компромисс — между простотой, производительностью, безопасностью и эксплуатацией: назовите, что оптимизировали и какую цену приняли.
Чеклист:
- Разделяйте authn middleware и authz checks.
- Именованные permissions, не только roles.
- Authz на границе ресурса.
- Unit-тесты policy tables и edge cases.