query+=" WHERE NOT EXISTS (SELECT record FROM storage WHERE user_id = $2 AND bucket = $3 AND collection = $4 AND record = $5 AND deleted_at = 0"
// If needed use an additional clause to enforce permissions.
ifcaller!=uuid.Nil{
query+=" AND write = 0"
query+=" WHERE NOT EXISTS (SELECT record FROM storage WHERE user_id = $2 AND bucket = $3 AND collection = $4 AND record = $5 AND deleted_at = 0 AND write = 0)"
}
query+=`)
query+=`
ON CONFLICT (bucket, collection, user_id, record, deleted_at)
DO UPDATE SET value = $6::BYTEA, version = $7, read = $8, write = $9, updated_at = $10`
}elseifbytes.Equal(d.Version,[]byte("*")){
@@ -311,9 +310,15 @@ WHERE `
iflen(key.UserId)!=0{
ifuid,err:=uuid.FromBytes(key.UserId);err!=nil{
returnBAD_INPUT,errors.New("Invalid user ID")
}elseifcaller!=uuid.Nil&&caller!=uid{
// If the caller is a client, only allow them to write their own data.
returnBAD_INPUT,errors.New("A client can only remove their own records")
}else{
owner=uid.Bytes()
}
}elseifcaller!=uuid.Nil{
// If the caller is a client, do not allow them to write global data.
returnBAD_INPUT,errors.New("A client cannot remove global records")