2014-09-17 3 views
0

Так что я относительно новичок в использовании 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" 
     } 
    } 
} 
+1

Существует целый документ на [понимание данных] (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

ответ

1

Вы должны денормализовать данные в несколько «таблицы», где таблицы «ссылка» друг с другом в некотором роде. Например: каждый пользователь получит список client_ids, каждый клиент получит список user_ids (при условии, что вы будете получать доступ к данным в обоих направлениях). Больше данных нужно синхронизировать, но как только будет такая плоская структура, вы также обнаружите, что будет намного проще установить ваши разрешения.

Эта вложенная структура, поскольку у вас есть это сейчас, крайне неэффективна с бэкэдом NoSQL, таким как Firebase, поскольку вам нужно получить все эти данные, когда вы получите данные для пользователя, и вы не можете сказать, например. какие клиенты принадлежат к пользователю без повторения через все из них.

Обязательно читать https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html

Смежные вопросы