我有一个轮询应用程序,其中每个极点都具有以下结构-
topic: Topic
questions
{
Q1
{
name: "q1"
type: "Single Choice"
options: ["Yes", "No"]
}
Q2
{
name: "Q2"
type: "MCQ"
options: ["A", "B", "C"]
}
Q3
{
name: "Q3"
type: "LongAnswer"
options: null
}
}
民意调查结果文件如下-
{
"Q2": {
"A": 3,
"C": 6,
"B": 3
},
"Q3": {
"Responses": [
"This is my response."
]
},
"Q1": {
"No": 2,
"Yes": 4
}
}
我需要写下一个安全规则,以确保如果问题属于“单选”类型,则用户只能在值中增加1,并且不能更改多个值。但是,事先不知道问题或选项的数量,并且安全规则不允许循环。我该怎么办?
答案 0 :(得分:1)
除非您提前知道每个问题的结构,否则这不可能。相反,您应该通过后端发送投票,这样您就可以更灵活地检查自己的内容,并且只编写满足要求的更新。
答案 1 :(得分:1)
正如您发现的那样,您无法在安全规则中做任何“类似”的事情。
因此,您需要更改数据模型以允许用例。由于您说用户只能执行一次操作,因此,您应该使用UID作为密钥:
responses: {
$uid: "thing they voted on"
}
然后,我建议使用Cloud Functions来计算结果。在上述数据结构上使用ServerValue.increment()
和安全规则可能会强制执行 ,但最终会变得相当复杂。