2014-06-21 1 views
0

Comment puis-je restreindre l'accès en écriture à la propriété d'un objet dans Firebase à la session du navigateur qui l'a créé en utilisant ref.push()? Je veux que tous les clients aient un accès en lecture aux enfants de /buttonClicksByBrowserSession comme je le fais dans les règles de sécurité ci-dessous, et je veux que les clients puissent pousser un enfant à /buttonClicksByBrowserSession et le modifier, mais je veux que l'enfant soit édité après le navigateur rafraîchir.Firebase: limite l'accès en écriture d'un enfant à la session du navigateur qui l'a créé

Mes règles de sécurité Firebase:

{ 
    "rules": { 
     ".read": false, 
     ".write": false, 
     "buttonClicksByBrowserSession": { 
      ".read": true, 
      "$autoGeneratedID": { 
      ".write": "newData.isNumber() && (data.val() == null && newData.val() === 1 || newData.val() - data.val() === 1") 
      } 
     } 
    } 
} 


Mes JS:

var fbRef = new Firebase('https://fbKey.firebaseIO.com/buttonClicksByBrowserSession'); 
var numClicksRef = fbRef.push(); 
var numClicks = 0; 

button.addEventListener('click', function() { 
    numClicksRef.set(++numClicks); 
}); 

Répondre

1

uTiliseRa anonymous login, qui permet pour vous d'assigner aux utilisateurs une par session, ID unique pouvant être utilisé dans les règles de sécurité.

var fb = new Firebase(URL); 
var auth = new FirebaseSimpleLogin(fb, function(err, user) { 
    if(err) throw err; 
    if(user) init(user); 
}); 

function init(user) { 
    fb.child('buttonClicksByBrowserSession/'+user.uid).transaction(function(currValue) { 
     return (currValue||0)+1; 
    }); 
} 

auth.login('anonymous', {rememberMe: false}); 

Règles de sécurité:

"buttonClicksByBrowserSession": { 
    ".read": true, 
    "$autoGeneratedID": { 
     ".write": "auth.uid === $autoGeneratedID", 
     ".validate": "newData.isNumber() && newData.val() === (data.val()||0)+1" 
    } 
} 
0

Pour cette fonctionnalité, je pense que je ferais d'un simple déconnexion/connexion lors de l'initialisation de la page - Obtenir un nouvel identifiant utilisateur chaque actualisation.

Ensuite, maintenez les données avec l'ID utilisateur comme la clé finale, avec une règle de restreindre écrit à l'utilisateur avec cet identifiant ...

Questions connexes