获取指定 area/country 的注释(来自数据库)

Get annotations for a specified area/country (from database)

我正在开发一个 iOS 应用程序,可以处理用户添加的位置(地标)。用户添加的位置包含数据(如标题和描述)。我想授予用户(管理员)更改发送位置数据的权限,但仅限于城市或国家等受限区域。

我正在使用 Firebase 来存储位置(因此我可以同时访问 iOS 和 Android),但我不知道我必须将它们存储在哪个结构中。我首先想到的是我可以根据用户发送的 CLPlacemark 国家/地区属性来存储位置(例如,如果我将 placemark.country 等于 "Norway" 的位置发送到 Firebase,则会添加该位置到名为 "locations" 的主数组中的数组 "norway")。

但是 MapKit 响应语言是基于设备语言的,因此如果设备语言是挪威语,地标的国家/地区将是 "Norge" 而不是 "Norway",并且不会保存到 "norway"-数组。因此,我无法验证管理员是否有权访问特定国家/地区,因为可以将位置保存为 "norway" 或 "norge" 或其他语言的国家/地区名称。

如果我无法在 Firebase 中对位置进行排序,如何让管理员有权访问某些 countries/cities 的更改数据?

有没有办法检查英文的国家名称和城市名称,然后根据英文名称将它们添加到 Firebase,或者我是否必须将所有位置存储在一个大数组中并在加载它们时验证它们来自 Firebase?

您需要取消数据与其在 Firebase 中的存储方式的关联。有 100 种方法可以做到这一点,但这里只有一种。

每个 country_id_0 都是使用 childByAutoId 创建的。

countries
   country_id_0
     USA: "Norway"
     Norwegian: "Norge"
   country_id_1
     USA: "France"
     Norwegian: "Frankrike"

以及存储管理员的结构。

admins
   user_id_0
      country_id_0: true
   user_id_1
      country_id_1: true

使用此结构,user_id_0 拥有对 country_id_0(挪威)的管理权限,user_id_1 可以管理 country_id_1(法国)。 user_id_x 是从 authData.uid.

中找到的 uid

您应用中的代码将仅引用 country_id_0 - 因此实际的国家/地区名称与您的代码没有关联。另一个好处是,如果国家/地区名称发生变化,它不会影响您的代码;只更新包含名称字符串的子节点。

如果您需要某种语言的实际名称,您可以简单地参考

countries/country_id_1/Norwegian

这将 return 'Frankrike'

此外,如果您正在考虑存储阵列的 Firebase,可能会有更好的选择。