我正在开发一个适用于用户添加的位置(地标)的iOS应用。用户添加的位置包含数据(如标题和说明)。我想让用户(管理员)访问更改发送位置的数据,但仅限于城市或国家等受限区域。
我正在使用Firebase来存储位置(所以我可以在iOS和Android上使用它们),但我不知道我必须在哪个结构中存储它们。我首先想到我可以根据用户发送的CLPlacemark国家/地区属性来存储位置(例如,如果我使用placemark.country将位置发送到Firebase,等于"挪威",位置将被添加到数组" norway"在名为" locations")的主数组中。
但是MapKit响应语言是基于设备语言的,所以如果设备语言是挪威语,那么地标的国家将是" Norge"而不是"挪威"然后不会被保存到"挪威" -array。因此,我无法验证管理员是否可以访问特定国家/地区,因为这些位置可以保存在"挪威"或者" norge"或其他语言的国家名称。
如果我无法对Firebase中的位置进行排序,如何让管理员有权访问某些国家/城市的数据?
有没有办法用英语检查国家/地区名称和城市名称,然后根据英文名称将它们添加到Firebase,或者我必须将所有位置存储在一个大数组中,并在我从Firebase加载它们时对其进行验证?
答案 0 :(得分: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 - 因此实际的国家/地区名称与您的代码取消关联。如果国家名称发生变化,它将不会影响您的代码;只需更新包含名称字符串的子节点。
如果您需要某种语言的实际名称,可以参考
国家/ country_id_1 /挪威
将返回'Frankrike'
另外,如果您正在考虑存储阵列的Firebase,可能会有更好的选择。