github.com/true-sqn/fabric@v2.1.1+incompatible/core/aclmgmt/aclmgmtimpl.go (about)

     1  /*
     2  Copyright IBM Corp. All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package aclmgmt
     8  
     9  import "github.com/hyperledger/fabric/core/policy"
    10  
    11  //implementation of aclMgmt. CheckACL calls in fabric result in the following flow
    12  //    if resourceProvider[resourceName]
    13  //       return resourceProvider[resourceName].CheckACL(...)
    14  //    else
    15  //       return defaultProvider[resourceName].CheckACL(...)
    16  //with rescfgProvider encapsulating resourceProvider and defaultProvider
    17  type aclMgmtImpl struct {
    18  	//resource provider gets resource information from config
    19  	rescfgProvider ACLProvider
    20  }
    21  
    22  //CheckACL checks the ACL for the resource for the channel using the
    23  //idinfo. idinfo is an object such as SignedProposal from which an
    24  //id can be extracted for testing against a policy
    25  func (am *aclMgmtImpl) CheckACL(resName string, channelID string, idinfo interface{}) error {
    26  	//use the resource based config provider (which will in turn default to 1.0 provider)
    27  	return am.rescfgProvider.CheckACL(resName, channelID, idinfo)
    28  }
    29  
    30  //ACLProvider consists of two providers, supplied one and a default one (1.0 ACL management
    31  //using ChannelReaders and ChannelWriters). If supplied provider is nil, a resource based
    32  //ACL provider is created.
    33  func NewACLProvider(rg ResourceGetter, policyChecker policy.PolicyChecker) ACLProvider {
    34  	return &aclMgmtImpl{
    35  		rescfgProvider: newResourceProvider(rg, newDefaultACLProvider(policyChecker)),
    36  	}
    37  }