【发布时间】:2018-07-06 08:19:50
【问题描述】:
我在 go 中编写了一个 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,所以你们能帮我理解如何映射它以获得预期的输出。
【问题讨论】: