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.