func create_set_iam_policy_request()

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
	}
}