Hyperledger fabric HyperLedger结构中的授权

Hyperledger fabric HyperLedger结构中的授权,hyperledger-fabric,Hyperledger Fabric,在Hyperledger结构上构建的应用程序中实现授权的最佳方法是什么 从这里考虑Marbles演示用例: 我应该如何/在何处实现以下功能 只有管理员用户才能创建和分配新的弹珠 本例中的用户Amy、Alice、Ava只允许转出他们拥有的大理石 您可能需要考虑利用GeC造饰器API来提取创建事务建议的客户端的证书。一旦获得证书,您就可以实现所需的功能,例如: 只有管理员用户才能创建和分配新的弹珠 本例中的用户Amy、Alice、Ava只允许转出他们拥有的大理石 以下是如何在链码中对证书进行理想化的

在Hyperledger结构上构建的应用程序中实现授权的最佳方法是什么

从这里考虑Marbles演示用例:

我应该如何/在何处实现以下功能

只有管理员用户才能创建和分配新的弹珠 本例中的用户Amy、Alice、Ava只允许转出他们拥有的大理石

您可能需要考虑利用GeC造饰器API来提取创建事务建议的客户端的证书。一旦获得证书,您就可以实现所需的功能,例如:

只有管理员用户才能创建和分配新的弹珠

本例中的用户Amy、Alice、Ava只允许转出他们拥有的大理石

以下是如何在链码中对证书进行理想化的示例:

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)
}

您可能需要考虑利用GeC造饰器API来提取创建事务建议的客户端的证书。一旦获得证书,您就可以实现所需的功能,例如:

只有管理员用户才能创建和分配新的弹珠

本例中的用户Amy、Alice、Ava只允许转出他们拥有的大理石

以下是如何在链码中对证书进行理想化的示例:

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)
}