2017-10-05 16 views
1

Was ist der beste Weg, um die Autorisierung in Anwendungen zu implementieren, die auf Hyperledger Fabric basieren?Autorisierung in HyperLedger Fabric

Betrachten Sie das Murmeln Demo Anwendungsfall von hier: https://github.com/IBM-Blockchain/marbles

Wie/Wo soll ich die folgende Funktionalität implementieren?

  • Nur Admin-Benutzer in der Lage sein, neue Murmeln zu erstellen und zuweisen
  • Benutzer (Amy, Alice, Ava aus diesem Beispiel) sollte nur dann erlaubt, die Murmeln zu übertragen, dass sie besitzen

Antwort

1

Wahrscheinlich Sie müssen die Verwendung der API GetCreator in Betracht ziehen, um das Zertifikat des Clients zu extrahieren, der den Transaktionsvorschlag erstellt hat. Sobald Sie Zertifikat erhalten wird können Sie gewünschte Funktionalität implementieren, zB:

  • Nur Admin-Benutzer in der Lage sein, neue Murmeln

  • zu erstellen und zuweisen
  • Benutzer (Amy, Alice, Ava aus diesem Beispiel) sollte dürfen nur die Murmeln übertragen, dass sie

Hier besitzen ist das Beispiel dafür, wie Zertifikat desirialize innerhalb 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) 
} 
Verwandte Themen