Ok. После нескольких часов поиска я взял тормоз для кофе и сразу нашел ответ:)
Правила безопасности базы данных Firebase поставляются с объектом "auth" , который содержит почти все, что вы (номер телефона, адрес электронной почты, имя и т. д.). Вся информация, которую я искал, помещается в «auth.token ».
Новые правила выглядят следующим образом:
{
"rules": {
".read": "auth != null",
".write": "root.child('Users').child(auth.token.phone_number).exists()"
}
}
Насколько я знаю, вы не можете так просто.
Как вы можете прочитать на этой странице
Массив и типы функций могут быть записаны в объявлении шаблона, но они автоматически заменяются указателем на объект и указателем на функцию при необходимости.
blockquote>Таким образом, вы можете написать
template <auto a, typename TVal> inline void fill_all(const TVal &v) { } // ... static int a[4] {}; fill_all<a>(2);
, но
fill_all()
увидеть типa
какint *
, а не какint[4]
.Таким образом, вы можете использовать его как указатель, но вы потеряли информацию об измерении.
Лучшее, что я могу себе представить, это вызвать функцию
constexpr
, которая возвращает размер массива и помещает это значение в качестве параметра шаблона (или аргумента функции)template <typename T, std::size_t N> constexpr std::size_t getDim (T const (&)[N]) { return N; } template <auto a, std::size_t N, typename TVal> inline void fill_all (TVal const & v) { std::fill(a, a + N, v); } // ... static int a[4] {}; fill_all<a, getDim(a)>(2);
, но, к сожалению, я не Не вижу способа избежать явного вызова
getDim()
в явном списке аргументов шаблона.