Код Middle Авторизация: IDOR, RBAC, ABAC обновлено
Проверка доступа к документу
Условие
Напишите canAccess(user, action, doc). user = {id, tenant, role}, doc = {ownerId, tenant}, action одно из read, update, delete.
Правила:
- Документ другого арендатора недоступен никому.
adminможет всё.editorможетreadиupdate.viewerможетread.- Владелец документа (
user.id === doc.ownerId) можетread,update,deleteнезависимо от роли. - Всё остальное запрещено, включая неизвестные роли и действия.
Верните 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
- Первым делом проверьте действие и арендатора.
- Права ролей удобно описать объектом роль → список действий.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.