Как я к этому пришёл
Проверка была честная: если роль не подходит, компонент не рендерится. Выглядело надёжно.
Потом я открыл инструменты разработчика и посмотрел вкладку Network. Приложение спокойно скачивало из базы все задачи, включая чужие, а потом фильтровало их в браузере. Данные, которые пользователь не должен видеть, уже лежали у него в памяти вкладки. Спрятанная кнопка ничего не защищала.
Правильный ответ оказался архитектурным: ограничение должно стоять там, где данные отдаются, а не там, где рисуются. Security Rules описывают доступ на уровне документа, и обойти их из браузера нельзя.
Побочный вывод: если правило доступа получается сложным, обычно виновата структура данных. Я переразложил коллекции, и правила стали в три строки.
Чужие данные больше не покидают сервер. Интерфейс по-прежнему прячет лишнее — но теперь это про удобство, а не про безопасность.