code: func (p *policyChecker) CheckPolicy(channelID, policyName string, signedProp *pb.SignedProposal) error {
  	if channelID == "" {
  		return p.CheckPolicyNoChannel(policyName, signedProp)
  	}
  
  	if policyName == "" {
  		return fmt.Errorf("Invalid policy name during check policy on channel [%s]. Name must be different from nil.", channelID)
  	}
  
  	if signedProp == nil {
  		return fmt.Errorf("Invalid signed proposal during check policy on channel [%s] with policy [%s]", channelID, policyName)
  	}
  
  	// Get Policy
  	policyManager, _ := p.channelPolicyManagerGetter.Manager(channelID)
  	if policyManager == nil {
  		return fmt.Errorf("Failed to get policy manager for channel [%s]", channelID)
  	}
  
  	// Prepare SignedData
  	proposal, err := utils.GetProposal(signedProp.ProposalBytes)
  	if err != nil {
  		return fmt.Errorf("Failing extracting proposal during check policy on channel [%s] with policy [%s]: [%s]", channelID, policyName, err)
  	}
  
  	header, err := utils.GetHeader(proposal.Header)
  	if err != nil {
  		return fmt.Errorf("Failing extracting header during check policy on channel [%s] with policy [%s]: [%s]", channelID, policyName, err)
  	}
  
  	shdr, err := utils.GetSignatureHeader(header.SignatureHeader)
  	if err != nil {
  		return fmt.Errorf("Invalid Proposal's SignatureHeader during check policy on channel [%s] with policy [%s]: [%s]", channelID, policyName, err)
  	}
  
  	sd := []*common.SignedData{{
  		Data:      signedProp.ProposalBytes,
  		Identity:  shdr.Creator,
  		Signature: signedProp.Signature,
  	}}
  
  	return p.CheckPolicyBySignedData(channelID, policyName, sd)
  }
docs: // CheckPolicy checks that the passed signed proposal is valid with the respect to
  // passed policy on the passed channel.