我在Firebase数据库中编写“WRITE”规则时遇到问题。我有一个节点“drink_database”,在其中,我有一个这些饮料的条形码列表。这可以从代码
中看出$ pm list permissions -g | grep 'permission:' | wc -l
509
现在,该应用的用户将能够将饮料上传到数据库,但是,如果该饮料的条形码在数据库中不存在。因此,从上面的示例中,如果用户的饮料具有条形码“8888”并且用户尝试将其上传到Firebase,我不希望用用户的数据覆盖此数据。此外,我希望只有经过身份验证的用户才能写入数据。有人可以帮助规则吗?
{
"drink_database": {
"8888": {
"barcode": "8888",
"drink_volume": "1234",
"image": "https://firebasestorage.googleapis.com/v0/b/popbar-664cd.appspot.com/o/drinks_images%2F8888?alt=media&token=72886b8c-f0fb-4729-a125-848ad2a48321",
"name": "sjsnj"
},
"1234568": {
"barcode": "1234568",
"drink_volume": "7879",
"image": "https://firebasestorage.googleapis.com/v0/b/popbar-664cd.appspot.com/o/drinks_images%2F1234568?alt=media&token=2d6dcc56-7a29-4551-8c32-c9b2765c436d",
"name": "vodka"
}
}
}
答案 0 :(得分:2)
在只有经过身份验证的用户可以创建(而不是更新或删除)数据的情况下,规则很简单:
".write": "auth != null && (!data.exists() || !newData.exists())"
有关更多信息和示例,建议您花一些时间阅读the firebase docs。
如果您还希望能够删除数据,可以将写入规则更改为:
var tableView = UITableView()
var twoDimensionalArray = [
cameraInfoStruct(cameraInfo: ["Camera Body","Lens", "FPS", "Shutter Angle", "Colour Temperature", "Resolution Width", "Resolution Height", "Format", "Camera Rig"]),
cameraInfoStruct(cameraInfo:["Focus Length", "F - Stop", "Camera Height", "Camera Tilt", "Camera Roll", "Filter"])
]
let cellId = "cellId"
let screenHeight = UIScreen.main.bounds.height
let screenWidth = UIScreen.main.bounds.width
let sectionHeaders = ["General", "Advanced"]
override func viewDidLoad() {
super.viewDidLoad()
addTableView()
}
func addTableView() {
tableView = UITableView(frame: CGRect(x: 0, y: 0, width: screenWidth, height: screenHeight))
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyCell")
tableView.dataSource = self
tableView.delegate = self
tableView.tableFooterView = UIView()
self.view.addSubview(tableView)
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
if let sectionHeaderArray = sectionHeaders as? [String] {
return sectionHeaderArray[section]
}
return "unknown"
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return twoDimensionalArray[section].cameraInfo.count
}
func numberOfSections(in tableView: UITableView) -> Int {
return sectionHeaders.count
}
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cell.backgroundColor = UIColor.white
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! cameraInfoCell
let shotNumber = twoDimensionalArray[indexPath.section].cameraInfo[indexPath.row]
cell.textLabel?.text = shotNumber
return cell
}
}