Правила безопасности Firestore получают поле / идентификатор ссылки

Кроме того, я хотел бы разместить небольшой пример того, как использовать git и makefile:

--- Makefile ----

# This how we want to name the binary output
BINARY=gomake

# These are the values we want to pass for VERSION and BUILD
# git tag 1.0.1
# git commit -am "One more change after the tags"
VERSION=`git describe --tags`
BUILD=`date +%FT%T%z`

# Setup the -ldflags option for go build here, interpolate the variable values
LDFLAGS_f1=-ldflags "-w -s -X main.Version=${VERSION} -X main.Build=${BUILD} -X main.Entry=f1"
LDFLAGS_f2=-ldflags "-w -s -X main.Version=${VERSION} -X main.Build=${BUILD} -X main.Entry=f2"

# Builds the project
build:
    go build ${LDFLAGS_f1} -o ${BINARY}_f1
    go build ${LDFLAGS_f2} -o ${BINARY}_f2

# Installs our project: copies binaries
install:
    go install ${LDFLAGS_f1}

# Cleans our project: deletes binaries
clean:
    if [ -f ${BINARY} ] ; then rm ${BINARY} ; fi

.PHONY: clean install

Файл make создаст два исполняемых файла. Один из них выполняет функцию один, другой будет выполнять функцию 2 в качестве основной записи:

package main

import (
        "fmt"
)

var (

        Version string
        Build   string
        Entry   string

        funcs = map[string]func() {
                "f1":functionOne,"f2":functionTwo,
        }

)

func functionOne() {
    fmt.Println("This is function one")
}

func functionTwo() {
    fmt.Println("This is function two")
}

func main() {

        fmt.Println("Version: ", Version)
        fmt.Println("Build Time: ", Build)

    funcs[Entry]()

}

Затем просто запустите:

make

Вы получите:

mab@h2470988:~/projects/go/gomake/3/gomake$ ls -al
total 2020
drwxrwxr-x 3 mab mab    4096 Sep  7 22:41 .
drwxrwxr-x 3 mab mab    4096 Aug 16 10:00 ..
drwxrwxr-x 8 mab mab    4096 Aug 17 16:40 .git
-rwxrwxr-x 1 mab mab 1023488 Sep  7 22:41 gomake_f1
-rwxrwxr-x 1 mab mab 1023488 Sep  7 22:41 gomake_f2
-rw-rw-r-- 1 mab mab     399 Aug 16 10:21 main.go
-rw-rw-r-- 1 mab mab     810 Sep  7 22:41 Makefile
mab@h2470988:~/projects/go/gomake/3/gomake$ ./gomake_f1
Version:  1.0.1-1-gfb51187
Build Time:  2016-09-07T22:41:38+0200
This is function one
mab@h2470988:~/projects/go/gomake/3/gomake$ ./gomake_f2
Version:  1.0.1-1-gfb51187
Build Time:  2016-09-07T22:41:39+0200
This is function two
2
задан John Dough 15 March 2019 в 03:45
поделиться

1 ответ

У меня была та же проблема, на которую я нуждался в ответе. См. эту гугл-ветку с ответом кого-то из Google. Процитируем это:

Вы можете получить id из пути, используя оператор «index»:

some_document_ref должно выглядеть как /databases/(default)/documents/foo/bar

который имеет 5 сегментов: ["databases", "(default)", ...]

some_document_ref[4] должен быть «бар», разрешить создание: если request.resource.data.some_document_ref [4] == «бар»;

Вы можете также используйте обычные функции get и exists для них.

Несколько трудных аспектов этого, с которыми вы можете столкнуться:

  • В настоящее время нет способа получить количество сегментов в пути (мы добавим это в ближайшее время) , поэтому вам нужно знать некоторую информацию о ссылке заблаговременно

  • Существует небольшая поддержка написания ссылок с использованием симулятора в консоли Firebase. Я использовал эмулятор Firestore, чтобы проверить это поведение (gist1, gist2)

0
ответ дан P. Soutzikevich 15 March 2019 в 03:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: