2016-09-01 2 views
0

Я создаю приложение, которое создает процессы для команд для завершения. В этих процессах есть члены, которые являются администраторами, которые могут писать им, а затем просто обычные пользователи, которые могут их читать. Когда пользователь создает процесс в первый раз, они по умолчанию становятся администраторами. Однако всякий раз, когда я пытаюсь создать процесс, я получаю «разрешение отказано» от Firebase, и я не могу. У меня есть по существу одно и то же правило для чтения (просто заменив «путь пользователей» на путь «админы»), и я умею хорошо читать процессы. Просто не в состоянии их сделать. Есть идеи, почему это происходит.Правила безопасности Firebase, возвращающие разрешения при попытке записи в базу данных

Вот правила безопасности для процессов:

"processes": { 
     "$processID": { 
      ".read": "auth.uid != null && data.child('users/' + auth.uid).val() === true", 
      ".write": "auth.uid != null && newData.child('admins/' + auth.uid).val() === true" 
     } 
     } 

Вот структура данных для процессов:

processes 
-KQ_j5Yt75GktE5pBRFS 
    admins 
     HESy7LE7JbeNyHKaGeyWRhNIuE83: true 
    createdOn: "2016-09-01T04:00:00.000Z" 
    description: "This is an example process" 
    name: "Example Personal Process" 
    tasks 
    team: "-KQ_iwUmXsx0zasoPxT9" 
    users 
     HESy7LE7JbeNyHKaGeyWRhNIuE83: true 

Вот функция, где я создаю процесс:

actions: { 
     createProcess(processName, processDescription) { 
     var teamId = this.controllerFor('processes/new').get('teamId'); 
     var self = this; 
     console.log("team: "+teamId); 
     let currentUser = this.get('user').get('currentUser'); 
     let team = this.get('store').peekRecord('team', teamId); 
     let user = this.get('store').peekRecord('user', currentUser.id); 
     console.log("user "+currentUser.id) 
     let process = this.get('store').createRecord('process', { 
      team: team, 
      user: user, 
      admin: user, 
      name: processName, 
      description: processDescription 
     }); 
     user.get('processes').pushObject(process); 
     user.get('processesLead').pushObject(process); 
     team.get('processes').pushObject(process); 
     console.log("about to save process"); 
     process.save().then(function() { 
     console.log(process.admin.id); 
     user.save(); 
     console.log("user saved"); 
     team.save(); 
     console.log("team saved"); 
    }).then(() => this.transitionTo('team', teamId)); 
     } 

Вот часть моей модели пользователя.

processes: DS.hasMany('process'), 
    tasks: DS.hasMany('task'), 
    processesLead: DS.hasMany('process', { inverse: 'admins' }), 
    teamsLead: DS.hasMany('team', { inverse: 'admins' }), 
    tasksLead: DS.hasMany('task', { inverse: 'admins' }), 
    processMember: DS.hasMany('process', { inverse: 'members' }), 
    teamMember: DS.hasMany('team', { inverse: 'members' }), 
    taskMember: DS.hasMany('task', { inverse: 'members' }) 

Вот часть моей модели процесса:

users: DS.hasMany('user'), 
    admins: DS.hasMany('user', { inverse: 'processesLead' }), 
    members: DS.hasMany('user', { inverse: 'processMember' }) 
+0

показать код, где вы пишете DB –

+0

И ради бога, замените строку даты/времени на отметку времени UNIX –

+0

Просто добавленный код. @DimaRostopira –

ответ

-1

Вы должны отделить data.child('users/' + auth.uid) в 2 различных .child() заявлений. Так что-то вроде этого: data.child('users').child(auth.uid).

+0

Так что я просто попробовал это и все еще имею ту же проблему. Я могу читать процессы, но не могу писать им. Любая идея почему? Это связано с тем, что я использую newData для записи? –