code: func (cp *ComparablePrincipal) IsA(other *ComparablePrincipal) bool {
  	this := cp
  
  	if other == nil {
  		return false
  	}
  	if this.principal == nil || other.principal == nil {
  		logger.Warning("Used an un-initialized ComparablePrincipal")
  		return false
  	}
  	// Compare the MSP ID
  	if this.mspID != other.mspID {
  		return false
  	}
  
  	// If the other Principal is a member, then any role or OU role
  	// fits, because every role or OU role is also a member of the MSP
  	if other.role != nil && other.role.Role == msp.MSPRole_MEMBER {
  		return true
  	}
  
  	// Check if we're both OU roles
  	if this.ou != nil && other.ou != nil {
  		sameOU := this.ou.OrganizationalUnitIdentifier == other.ou.OrganizationalUnitIdentifier
  		sameIssuer := bytes.Equal(this.ou.CertifiersIdentifier, other.ou.CertifiersIdentifier)
  		return sameOU && sameIssuer
  	}
  
  	// Check if we're both the same MSP Role
  	if this.role != nil && other.role != nil {
  		return this.role.Role == other.role.Role
  	}
  
  	// Else, we can't say anything, because we have no knowledge
  	// about the OUs that make up the MSP roles - so return false
  	return false
  }
docs: // IsA determines whether all identities that satisfy this ComparablePrincipal
  // also satisfy the other ComparablePrincipal.
  // Example: if this ComparablePrincipal is a Peer role,
  // and the other ComparablePrincipal is a Member role, then
  // all identities that satisfy this ComparablePrincipal (are peers)
  // also satisfy the other principal (are members).