Рекурсивный подстановочный знак здесь разрешает доступ ко всем коллекциям:
match /{document=**} {
allow read;
allow write: if (request.auth.uid != null);
}
Как только любое правило разрешает доступ к коллекции, этот доступ не может быть отменен любым другим правилом.
Что вы придется сделать, это вызвать каждую отдельную коллекцию в своем собственном правиле. Да, это какая-то боль, но это твой единственный вариант. Кроме того, читателю ваших правил становится очень ясно, что вы намерены разрешить для каждой коллекции.
Также стоит отметить, что это правило на самом деле ничего не делает, потому что оно не соответствует ни одному документу. :
match /publicdata {
allow read;
}
Если вы хотите сопоставить документы в коллекции publicdata, требуется подстановочный знак, соответствующий документу в этой коллекции:
match /publicdata/{id} {
allow read;
}
Помните, что правила соответствуют документы для доступа, а не коллекции.