Код Middle Авторизация: IDOR, RBAC, ABAC обновлено

Проверка доступа к документу

Условие

Напишите canAccess(user, action, doc). user = {id, tenant, role}, doc = {ownerId, tenant}, action одно из read, update, delete.

Правила:

  1. Документ другого арендатора недоступен никому.
  2. admin может всё.
  3. editor может read и update.
  4. viewer может read.
  5. Владелец документа (user.id === doc.ownerId) может read, update, delete независимо от роли.
  6. Всё остальное запрещено, включая неизвестные роли и действия.

Верните true или false.

Примеры

canAccess({"id":1,"tenant":"a","role":"viewer"}, "read", {"ownerId":2,"tenant":"a"}) // true
canAccess({"id":1,"tenant":"a","role":"viewer"}, "update", {"ownerId":2,"tenant":"a"}) // false
canAccess({"id":1,"tenant":"a","role":"viewer"}, "delete", {"ownerId":1,"tenant":"a"}) // true

Как подойти

Подсказки: 2
  1. Первым делом проверьте действие и арендатора.
  2. Права ролей удобно описать объектом роль → список действий.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.