code: func (authzHandler unionAuthzHandler) Authorize(a authorizer.Attributes) (authorizer.Decision, string, error) {
  	var (
  		errlist    []error
  		reasonlist []string
  	)
  
  	for _, currAuthzHandler := range authzHandler {
  		decision, reason, err := currAuthzHandler.Authorize(a)
  
  		if err != nil {
  			errlist = append(errlist, err)
  		}
  		if len(reason) != 0 {
  			reasonlist = append(reasonlist, reason)
  		}
  		switch decision {
  		case authorizer.DecisionAllow, authorizer.DecisionDeny:
  			return decision, reason, err
  		case authorizer.DecisionNoOpinion:
  			// continue to the next authorizer
  		}
  	}
  
  	return authorizer.DecisionNoOpinion, strings.Join(reasonlist, "\n"), utilerrors.NewAggregate(errlist)
  }
docs: // Authorizes against a chain of authorizer.Authorizer objects and returns nil if successful and returns error if unsuccessful