2017-10-05 1 views
1

Quelle est la meilleure façon d'implémenter l'autorisation dans les applications construites sur Hyperledger Fabric?Autorisation dans HyperLedger Fabric

Prenons le cas d'utilisation de démonstration Marbles d'ici: https://github.com/IBM-Blockchain/marbles

Comment/Où dois-je mettre en œuvre les fonctionnalités suivantes?

  • Seuls les utilisateurs admin pouvoir créer et allouer de nouvelles billes
  • utilisateurs (Amy, Alice, Ava de cet exemple) devrait être autorisé que pour transférer les billes dont ils sont propriétaires

Répondre

1

Probablement vous devez envisager de tirer parti de l'API GetCreator pour extraire le certificat du client qui a créé la proposition de transaction. Une fois que vous obtiendrez un certificat, vous pouvez implémenter la fonctionnalité désirée, par exemple:

  • Seuls les utilisateurs admin pouvoir créer et allouer de nouvelles billes

  • Utilisateurs (Amy, Alice, Ava de cet exemple) devrait être autorisés à transférer les billes dont ils sont propriétaires

Voici l'exemple de certificat dans desirialize chaincode:

func (*smartContract) Invoke(stub shim.ChaincodeStubInterface) peer.Response { 
    fmt.Println("Invoke") 

    serializedID, _ := stub.GetCreator() 

    sId := &msp.SerializedIdentity{} 
    err := proto.Unmarshal(serializedID, sId) 
    if err != nil { 
     return shim.Error(fmt.Sprintf("Could not deserialize a SerializedIdentity, err %s", err)) 
    } 

    bl, _ := pem.Decode(sId.IdBytes) 
    if bl == nil { 
     return shim.Error(fmt.Sprintf("Could not decode the PEM structure")) 
    } 
    cert, err := x509.ParseCertificate(bl.Bytes) 
    if err != nil { 
     return shim.Error(fmt.Sprintf("ParseCertificate failed %s", err)) 
    } 

    fmt.Println(cert) 

    return shim.Success(nil) 
}