2016-02-24 3 views
0

Я работаю над настройкой правил validaton для структуры данных Firebase, созданной с использованием компилятора Bolt.Трудность настройки правил проверки для базы данных Firebase

я в настоящее время имея заявление Болта ниже:

path /sharedEvents/{share} is Boolean[] { 
    read() { isMailOfCurrentUser(share) } 
    create() { isOwnerOfEvent(...) }  //NOT YET CORRECT! 
    delete() { isOwnerOfEvent(prior(...) } //NOT YET CORRECT! 
} 

С этим, я пытаюсь добиться того, что:

  1. только пользователей, имеющие почты, соответствующих ключу «долей 'разрешено считывать данные (они используют эту дату для извлечения ключа общих для них событий.
  2. Только владелец события может добавить/удалить ключ для своего мероприятия в список общих событий.

Этот второй пункт, где я столкнулся с проблемой - я не могу создать правила create/delete, поскольку я понятия не имею, как ссылаться на ключи логических значений в правиле проверки. .

пример данных в Firebase для вышеприведенного утверждения болта:

sharedEvents 
     ZW5kc3dhc0BldmVyeW1hMWwuYml6 
      -BDKBEvy-hssDhKqVF5w: true 
      -FDKBEvy-hsDsgsdsf5w: true 
      -ADBEvy-hfsdsdKqVF5w: true 
     aXQnc251bWJlcnNAbWExbDJ1LnVz 
      -KBEvy-hsDhH6OKqVF5w: true 

для уточнения потребностей на этом примере: только пользователь с почтой «ZW5kc3dhc0BldmVyeW1hMWwuYml6» умеет читать три вложенных Чайлдс. Только владелец события '-BDKBEvy-hssDhKqVF5w' должен иметь возможность создавать/удалять это значение. (то же самое для других ключей события/boolean).

Мой вопрос: будет ли эта настройка работать (и как настроить правила создания/удаления)? Или это не сработает, и я должен переосмыслить/структурировать данные?

Любая помощь приветствуется!

----------------- Выходной JSON FILE -------------------------- ----------------

вопрос выше был дан ответ, данный раздел показывает результирующую JSON

"sharedEvents": { 
     "$share": { 
     ".read": "<removed for readability>", 
     "$event": { 
      ".validate": "newData.isBoolean()", 
      ".write": "<removed for readability>" 
     } 
     } 
    }, 

еще раз спасибо за быстрый поддержку!

+0

Эй, Питер, я еще не понял вашу структуру данных. Я думаю, что у вас есть узел верхнего уровня, где живут реальные данные. Если да, можете ли вы добавить фрагмент этого JSON? –

+0

Я также думаю, что у вас будет некоторый узел, который отображает из 'auth.uid' значения, которые вы называете« mail ». Пожалуйста, добавьте это тоже. –

ответ

1

Вам понадобится вложенный оператор path для обработки ограничений на события (узлы под /sharedEvents/$mail/$eventid). Я быстро прототип с этой структурой JSON:

{ 
    "events": { 
    "-ADBEvy-hfsdsdKqVF5w": { 
     "name": "Event 1", 
     "ownerMail": "aXQnc251bWJlcnNAbWExbDJ1LnVz" 
    }, 
    "-BDKBEvy-hssDhKqVF5w": { 
     "name": "Event 2", 
     "ownerMail": "aXQnc251bWJlcnNAbWExbDJ1LnVz" 
    }, 
    "-FDKBEvy-hsDsgsdsf5w": { 
     "name": "Event 3", 
     "ownerMail": "aXQnc251bWJlcnNAbWExbDJ1LnVz" 
    }, 
    "-KBEvy-hsDhH6OKqVF5w": { 
     "name": "Event 3", 
     "ownerMail": "ZW5kc3dhc0BldmVyeW1hMWwuYml6" 
    } 
    }, 
    "sharedEvents": { 
    "ZW5kc3dhc0BldmVyeW1hMWwuYml6": { 
     "-ADBEvy-hfsdsdKqVF5w": true, 
     "-BDKBEvy-hssDhKqVF5w": true, 
     "-FDKBEvy-hsDsgsdsf5w": true 
    }, 
    "aXQnc251bWJlcnNAbWExbDJ1LnVz": { 
     "-KBEvy-hsDhH6OKqVF5w": true 
    } 
    }, 
    "userMails": { 
    "peter": "aXQnc251bWJlcnNAbWExbDJ1LnVz", 
    "puf": "ZW5kc3dhc0BldmVyeW1hMWwuYml6" 
    } 
} 

И придумал эти правила:

path /sharedEvents/{share} { 
    read() { isMailOfCurrentUser(share) } 
} 

path /sharedEvents/{share}/{event} is Boolean { 
    create() { isOwnerOfEvent(event) } 
    delete() { isOwnerOfEvent(prior(event)) } 
} 

isMailOfCurrentUser(share) { true } 
getMailOfCurrentUser(uid) { root.ownerMails.uid } 
getEventOwnerMail(event) { root.events.event.ownerMail } 
isOwnerOfEvent(event) { getMailOfCurrentUser(auth.uid) == getEventOwnerMail(event) } 

Игнорирование ошибок на моем конце концов, это должно быть основы структуры авторизации, который вы ищете ,

+0

Фрэнк, это здорово! Ты хочешь, чтобы я исправить проблему, с которой я боролся в течение некоторого времени :) Я не знал об этой возможности для создания этих «двойных» определений путей. Благодарю. Сгенерированные правила.Однако json-файл содержит небольшую проблему: оператор boolean .validation генерируется для обоих путей. Я редактировал свой вопрос с помощью json-вывода, так как он не соответствует комментариям. – Peter

+0

Я много узнал о Болте, работая над ответом, так что это было весело! Болт потрясающий. Я знал это, но иногда нужно напоминание. О, и добавление вашего JSON к вопросу - это правильная вещь. –