UUID усложняет перебор, но не заменяет авторизацию: проверка resource.owner_id == current_user (или RBAC/ABAC) обязательна на каждый read/write; тесты с двумя пользователями ловят регрессии.
Разбор
- Единый слой policy (middleware/service), не копипаста в контроллерах.
- List endpoints тоже фильтруйте по scope.
- Админские обходы — явные роли и аудит.
- Горизонтальный vs вертикальный privilege escalation — разные кейсы.
Итог
Скрытость идентификатора ≠ авторизация; проверяйте права на объект всегда.