实现上,一条 policy 结构实现一个 evalutor 方法。
type policy struct {
evaluator func([]*cb.SignedData, []bool) bool
}
对外提供的方法是 Evaluate() 方法,调用了 evaluator() 私有方法。
func (p *policy) Evaluate(signatureSet []*cb.SignedData) error {
if p == nil {
return fmt.Errorf("No such policy")
}
ok := p.evaluator(signatureSet, make([]bool, len(signatureSet)))
if !ok {
return errors.New("Failed to authenticate policy")
}
return nil
}
同时,提供了 NewPolicyProvider(deserializer msp.IdentityDeserializer) policies.Provider 方法,作为工厂方法。