Так что я относительно новичок в использовании Firebase и im, пытающихся выяснить, как структурировать данные, чтобы они были безопасными и нормализованными.
Структура и безопасность данных Firebase
мне нужна безопасность пользователя на основе для моих данных, которые в концепции выглядит примерно так:
{
"users": {
"simplelogin:1": {
"email": "[email protected]",
"id": "1",
"name": "test",
"provider": "password",
"clients": {
"client1": {
"name": "testClient",
"projects": {
"project1": {
"name": "testProject",
"sites": {
"site1": {
"name": "testWobsite",
"hits": {
"hit1": {},
"hit2": {},
"hit3": {}
}
},
"site2": {}
}
},
"project2": {}
}
},
"client2": {
"name": "test",
"projects": {}
},
}
},
"simplelogin:2": {
"email": "[email protected]",
"id": "2",
"name": "test2",
"provider": "password",
"clients": {}
}
}
}
Как вы можете видеть, структура данных здесь чрезвычайно вложен ...
Пользователи имеют клиентов, у клиентов есть проекты, проекты имеют сайты, сайты имеют хиты ...
Так что это одна из моих основных проблем - я не совсем уверен, как структурировать эти данные, чтобы они не были вложенными.
Другая проблема, с которой связана проблема, заключается в том, как работать с правилами безопасности Firebase.
В сущности, я хочу, чтобы пользователи могли создавать, обновлять и удалять все данные, которыми они владеют (клиенты, проекты, сайты и хиты).
Хиты должны быть общедоступными, но доступны только для пользователей, которые владеют им.
Пользователи должны иметь возможность регистрироваться и регистрироваться, но не иметь возможности читать или писать какие-либо чужие данные.
Если у кого есть какие-либо идеи по поводу этого или каких-либо советов или указателей, любой совет будет очень благодарен!
Спасибо!
EDIT
Вот моя попытка нормализации данных ... любые мысли ..?
{
"users": {
"simplelogin:1": {
"email": "[email protected]",
"id": "1",
"name": "test",
"provider": "password",
"clients": {
"testClient": "client1",
"test": "client2"
}
},
"simplelogin:2": {
"email": "[email protected]",
"id": "2",
"name": "test2",
"provider": "password",
"clients": {}
}
},
"clients": {
"client1": {
"owner": "simplelogin:1",
"parent": "",
"name": "testClient",
"projects": {
"testProject": "project1",
"testProject_2": "project2"
}
},
"client2": {
"owner": "simplelogin:1",
"parent": "",
"name": "test",
"projects": {}
}
},
"projects": {
"project1": {
"owner": "simplelogin:1",
"parent": "client1",
"name": "testProject",
"sites": {
"testWebsite": "site1",
"testWebsite2": "site2"
}
},
"project2": {
"owner": "simplelogin:1",
"parent": "client1",
"name": "testProject_2",
"sites": {}
}
},
"sites": {
"site1": {
"owner": "simplelogin:1",
"parent": "project1",
"name": "testWebsite",
"hits": {
"firstHit": "hit1",
"secondHit": "hit2",
"thirdHit": "hit3"
}
},
"site2": {
"owner": "simplelogin:1",
"parent": "project1",
"name": "testWebsite2",
"hits": {}
}
},
"hits": {
"hit1": {
"owner": "simplelogin:1",
"parent": "site1",
"name": "firstHit"
},
"hit2": {
"owner": "simplelogin:1",
"parent": "site1",
"name": "secondHit"
},
"hit3": {
"owner": "simplelogin:1",
"parent": "site1",
"name": "thirdHit"
}
}
}
Существует целый документ на [понимание данных] (https://www.firebase.com/docs/web/guide/understanding-data.html), а другой на [структурирование data] (https://www.firebase.com/docs/web/guide/structuring-data.html), а также [блог] (https://www.firebase.com/blog/2013-10-01 -queries-part-one.html) [сообщения] (https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html) и [вопросы переполнения стека] (http: // stackoverflow.com/questions/16421179/whats-the-best-way-of-structuring-data-on-firebase/16423316#16423316). Поместите их в свои собственные пути и используйте идентификаторы записи, чтобы ссылаться на них. – Kato