Правильно отобразить файл конфигурации YAML в golang - PullRequest
0 голосов
/ 06 июля 2018

Я пишу API на ходу, который может создать организацию с правилами политик по умолчанию.

Я хочу использовать внешний файл конфигурации YAML для включения некоторых политик в мой API (я фактически помещаю политики в свой код в функцию, которая создает мою организацию сущностей):

policy.yml

- role: "admin"
  organisationid: organisation.ID
  policies:
    [{Object: "/*", Action: "*"}]

- role: "user"
  organisationid: organisation.ID
  policies:
    [{Object: "/me", Action: "GET"},
    {Object: "/organisations", Action: "GET"},
    {Object: "/acl/roles", Action: "GET"}]

Я извлекаю его, используя go-yaml lib, и ожидаемый результат должен быть:

[{admin organisation.ID [{/* *}]} {user organisation.ID [{/me GET} {/organisations GET} {/acl/roles GET}]}]

Но когда я извлекаю его в виде структуры:

// OrganisationRole ...
type OrganisationRoleNoPolicy struct {
    Role           string              `json:"role"`
    OrganisationID string              `json:"organisation"`
    Policies       []map[string]string `json:"policies"`
}

func extractYaml() (config []OrganisationRoleNoPolicy) {

    filename := "policy.yml"
    source, err := ioutil.ReadFile(filename)
    if err != nil {
        panic(err)
    }
    err = yaml.Unmarshal(source, &config)
    if err != nil {
        log.Fatalf("error: %v", err)
    }
    fmt.Printf("--- config:\n%v\n\n", config)
    return
}

Я получаю это:

[{admin organisation.ID [map[Object:/* Action:*]]} {user organisation.ID [map[Object:/me Action:GET] map[Object:/organisations Action:GET] map[Object:/acl/roles Action:GET]]}]

Может быть, я не совсем понимаю, как использовать или правильно писать YAML, поэтому, ребята, не могли бы вы помочь мне понять, как отобразить его, чтобы получить ожидаемый результат.

1 Ответ

0 голосов
/ 06 июля 2018

Наконец, найдите его, мне нужно немного изменить свой Yaml, чтобы получить правильный массив, случай, кажется, тоже очень важен:

- role: "admin"
  organisationid: organisation.ID
  policies:
    - {object: "/*", action: "*"}

- role: "user"
  organisationid: organisation.ID
  policies:
    - {object: "/me", action: "GET"}
    - {object: "/organisations", action: "GET"}
    - {object: "/acl/roles", action: "GET"}

и моя структура немного отличается, она содержит структуру, в которую входят две мои строки:

type policy struct {
    Object string `json:"obj" binding:"required"`
    Action string `json:"act" binding:"required"`
}

// OrganisationRole ...
type OrganisationRole struct {
    Role           string   `json:"role"`
    OrganisationID string   `json:"organisation"`
    Policies       []policy `json:"policies"`
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...