Sayacı ilerledikçe kaydedin ve bunu uygulamak için doğrulamayı kullanın. Bunu birlikte hackledim - benzersiz oyları ve sayıları artmaya devam etmek için !. Ama bu sefer önerimi test ettim! (kesme / yapıştırma hatalarına rağmen!).
Buradaki 'numara', düğüm önceliğini oy sayımı olarak kullanmaktır ...
Veriler:
oy / $ issueBeingVotedOn / kullanıcı / $ uniqueIdOfVoter = thisVotesCount, öncelik = thisVotesCount oy / $ issueBeingVotedOn / count = 'kullanıcı /' + $ idOfLastVoter, öncelik = CountofLastVote
,"vote": {
".read" : true
,".write" : true
,"$issue" : {
"user" : {
"$user" : {
".validate" : "!data.exists() &&
newData.val()==data.parent().parent().child('count').getPriority()+1 &&
newData.val()==newData.GetPriority()"
kullanıcı yalnızca bir kez oy kullanabilir && sayı, mevcut sayıdan bir yüksek olmalıdır ve& veri değeri, öncelik ile aynı olmalıdır.
}
}
,"count" : {
".validate" : "data.parent().child(newData.val()).val()==newData.getPriority() &&
newData.getPriority()==data.getPriority()+1 "
}
say (gerçekten son seçmen) - oy mevcut olmalı ve sayısı newcount'a eşit olmalıdır, && newcount (öncelik) yalnızca bir artabilir.
}
}
Farklı kullanıcılar tarafından 10 oy eklemek için test komut dosyası (bu örnek için, kimlik sahte, üretimde kullanıcı kimlik doğrulamalı olmalıdır). Doğrulamanın başarısız olduğunu görmek için (i--) 10 kadar geri sayın.
<script src='https://cdn.firebase.com/v0/firebase.js'></script>
<script>
window.fb = new Firebase('https:...vote/iss1/');
window.fb.child('count').once('value', function (dss) {
votes = dss.getPriority();
for (var i=1;i<10;i++) vote(dss,i+votes);
} );
function vote(dss,count)
{
var user='user/zz' + count; // replace with auth.id or whatever
window.fb.child(user).setWithPriority(count,count);
window.fb.child('count').setWithPriority(user,count);
}
</script>
Buradaki 'risk', bir oylamanın atılması, ancak sayının güncellenmemesidir (haking veya komut dosyası hatası). Oyların benzersiz bir 'önceliğe' sahip olmasının nedeni budur - senaryo gerçekten mevcut sayıdan daha yüksek önceliğe sahip bir oylama olmadığından emin olarak başlamalıdır, eğer bu işlemi kendi işlemlerini yapmadan önce tamamlaması gerekiyorsa - müşterilerinizi temizlemelerini sağlayın senin için :)
Başlamadan önce sayımın bir öncelik ile başlatılması gerekir - forge bunu yapmanıza izin vermez, bu nedenle bir saplama betiğine ihtiyaç vardır (doğrulama etkin olmadan önce!).