-1

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

我正在使用 Firebase 存储位置(因此我可以在 iOS 和 Android 上访问它们),但我不知道我必须将它们存储在哪个结构中。我首先认为我可以根据用户发送的 CLPlacemark country 属性存储位置(例如,如果我向 Firebase 发送了 placemark.country 等于“挪威”的位置,则该位置将被添加到数组中”挪威”位于名为“locations”的主数组中)。

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

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

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

4

1 回答 1

0

您需要将数据与其在 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 - 因此实际国家名称与您的代码无关。如果国家名称更改,另一个好处是不会影响您的代码;只需更新包含名称字符串的子节点。

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

国家/地区_id_1/挪威语

这将返回'Frankrike'

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

于 2016-04-02T14:09:34.607 回答