github.com/sykesm/fabric@v1.1.0-preview.0.20200129034918-2aa12b1a0181/core/common/privdata/membershipinfo.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package privdata 8 9 import ( 10 "github.com/hyperledger/fabric-protos-go/peer" 11 "github.com/hyperledger/fabric/common/flogging" 12 "github.com/hyperledger/fabric/msp" 13 "github.com/hyperledger/fabric/protoutil" 14 ) 15 16 var logger = flogging.MustGetLogger("common.privdata") 17 18 // MembershipProvider can be used to check whether a peer is eligible to a collection or not 19 type MembershipProvider struct { 20 selfSignedData protoutil.SignedData 21 IdentityDeserializerFactory func(chainID string) msp.IdentityDeserializer 22 } 23 24 // NewMembershipInfoProvider returns MembershipProvider 25 func NewMembershipInfoProvider(selfSignedData protoutil.SignedData, identityDeserializerFunc func(chainID string) msp.IdentityDeserializer) *MembershipProvider { 26 return &MembershipProvider{selfSignedData: selfSignedData, IdentityDeserializerFactory: identityDeserializerFunc} 27 } 28 29 // AmMemberOf checks whether the current peer is a member of the given collection config. 30 // If getPolicy returns an error, it will drop the error and return false - same as a RejectAll policy. 31 func (m *MembershipProvider) AmMemberOf(channelName string, collectionPolicyConfig *peer.CollectionPolicyConfig) (bool, error) { 32 deserializer := m.IdentityDeserializerFactory(channelName) 33 accessPolicy, err := getPolicy(collectionPolicyConfig, deserializer) 34 if err != nil { 35 // drop the error and return false - same as reject all policy 36 logger.Errorf("Reject all due to error getting policy: %s", err) 37 return false, nil 38 } 39 if err := accessPolicy.EvaluateSignedData([]*protoutil.SignedData{&m.selfSignedData}); err != nil { 40 return false, nil 41 } 42 return true, nil 43 }