in analytics-hub/snippets/create_listing_golang/main.go [62:99]
func create_set_iam_policy_request(ctx context.Context, client *analyticshub.Client, listing_id string, role string, member string) (*iampb.SetIamPolicyRequest, error) {
existingPolicy, err := listing_get_iam_policy(ctx, client, listing_id)
if err == nil {
setIamPolicyRequest := &iampb.SetIamPolicyRequest{}
setIamPolicyRequest.Resource = listing_id
setIamPolicyRequest.Policy = &iampb.Policy{}
setIamPolicyRequest.Policy.Etag = existingPolicy.Etag
setIamPolicyRequest.Policy.Bindings = []*iampb.Binding{}
setIamPolicyRequest.Policy.Bindings = append(
setIamPolicyRequest.Policy.Bindings,
existingPolicy.GetBindings()...)
// Look for existing binding for the role
addToBinding := &iampb.Binding{Role: role, Members: []string{member}}
existingBindingFoundForRole := false
for _, binding := range setIamPolicyRequest.Policy.Bindings {
if binding.Role == role {
addToBinding = binding
existingBindingFoundForRole = true
}
}
// If there is an existing binding, add a new member to it
if existingBindingFoundForRole {
addToBinding.Members = append(
addToBinding.Members,
member)
// Else add a new binding with the role/member
} else {
setIamPolicyRequest.Policy.Bindings = append(
setIamPolicyRequest.Policy.Bindings,
addToBinding)
}
return setIamPolicyRequest, nil
} else {
println(err.Error())
return nil, err
}
}