2016-09-01 3 views
0

Ich erstelle eine App, die Prozesse für Teams erstellt, die abgeschlossen werden müssen. Diese Prozesse haben Mitglieder, die Administratoren sind, die ihnen schreiben können, und dann nur normale Benutzer, die sie lesen können. Wenn ein Benutzer einen Prozess zum ersten Mal erstellt, wird er standardmäßig zum Administrator ernannt. Wann immer ich versuche, einen Prozess zu erstellen, erhalte ich von Firebase eine "Berechtigung verweigert" und kann dies nicht. Ich habe im Wesentlichen die gleiche Regel zum Lesen (nur den 'Benutzer' Pfad mit dem 'Admins' Pfad zu ersetzen) und ich bin in der Lage, die Prozesse gut zu lesen. Einfach nicht in der Lage, sie zu machen. Irgendwelche Ideen, warum das passiert.Firebase-Sicherheitsregeln, bei denen die Berechtigung verweigert wird, wenn versucht wird, in die Datenbank zu schreiben

Hier sind die Sicherheitsregeln für Prozesse:

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

Hier wird die Datenstruktur für Prozesse ist:

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 

Hier ist die Funktion, wo ich einen Prozess erstellen:

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)); 
     } 

Hier ist ein Teil meines Benutzermodells.

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' }) 

Hier ist ein Teil meiner Prozessmodell:

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

zeigen Sie den Code, wo Sie in DB schreiben –

+0

Und um Gottes Willen, ersetzen Datum/Uhrzeit Zeichenfolge mit UNIX Timestamp –

+0

Nur Code hinzugefügt. @DimaRostopira –

Antwort

-1

Sie haben data.child('users/' + auth.uid) in 2 verschiedenen .child() Aussagen zu trennen. So etwas wie das: data.child('users').child(auth.uid).

+0

Also habe ich gerade das versucht und immer noch das gleiche Problem. Ich kann die Prozesse lesen, kann aber immer noch nicht an sie schreiben. Irgendeine Idee warum? Hat es damit zu tun, dass ich newData zum Schreiben verwende? –

Verwandte Themen