Hyperledger Blockchain Day 10: Thiết lập Access Control.

Hyperledger Blockchain Day 10: Thiết lập Access Control.

Như đã đề cập ở các bài trước Hyperledger Blockchain cho phép phân quyền cho các đối tượng khác nhau trong hệ thống được thực thi các tác vụ khác nhau. Các tác vụ bao gồm: tạo dữ liệu (create), đọc dữ liệu (read), cập nhật dữ liệu (update) và xóa dữ liệu (delete).

Để quy định các đối tượng trong Hyperledger blockchain network, ta sẽ có file permissions.acl. File thứ 4 từ trên xuống trong playground.


Trước khi đi vào nghiên cứu code của file này chúng ta sẽ tìm hiểu lại một chút về namespace.
Namespace dùng để định danh cho một đối tượng trong network và cũng là định dung có các đối tượng trong file model. Chúng ta có 2 kiểu để gọi namespace như sau:
- Kiểu 1: org.acme.shipping.Contract#contractId - như đã dùng ở bài trước. Trong đó Contract là một Asset trong file model; contractId là một contract cụ thể được tạo.
- Kiểu 2: Ta sử dụng system namespace,
org.hyperledger.composer.system.Contract#contractId ; lúc này ta đã yêu cầu truy cập vào Asset được lưu trên hệ thống của Hyperledger.

Ta cũng dùng cú pháp namespace org.acme.shipping.*  để target cho tất cả mọi thứ có trong model và dùng namespace org.hyperledger.composer.system.** để target cho tất cả mọi thứ có trong system.

Bây giờ, ta sẽ giải thích cách thiết lập giới hạn trong file permissions.acl. Một rule trong file như sau:

rule Lammoithu {
    description: "Tất cả mọi người có quyền thưc thi cả 4 tác vụ trong network"
    participant: "org.hyperledger.composer.system.Participant"
    operation: ALL
    resource: "org.hyperledger.composer.system.**"
    action: ALLOW


Đây là một Rule mẫu, cho phép tất cả các Participant được đọc, cập nhật, xóa và lưu dữ liệu mới trong tất cả các đối tượng của Blockchain.
- rule là từ khóa thông báo bắt đầu một rule; rule này có tên là "Làm mọi thứ".
- description: Tất cả mọi người có quyền thưc thi cả 4 tác vụ trong network
- participant: Đề cập tới ai sẽ là người chịu quản lý của rule này, ở đây là mọi Participant.
- operation: ALL = Create + reading + update + deleter.
- resource: Đối tượng sẽ bị tác động trong hệ thống; với cú pháp ở trên có nghĩa là tất cả mọi thứ trong system có thể được thay đổi bởi participant.
- action: ALLOW - cho phép; DENY - từ chối.

Rule như trên có quyền rất lớn, trong thực tế tại file này ta sẽ phải setup rất nhiều rule, chúng ta sẽ phân tích thêm một rule nữa.

rule NetworkAdminSystem {
    description: "Grant business network administrators full access to system resources"
    participant: "org.hyperledger.composer.system.NetworkAdmin"
    operation: ALL
    resource: "org.hyperledger.composer.system.**"
    action: ALLOW
}

Rule này thường được set cho Admin của hệ thống. Cho phép Admin có thể làm mọi tác vụ trong system. Rule này khác tương tự rule ở trên.

rule CanDelete {
    description: "Billy can delete contracts that he is a part of"
    participant(p): "org.hyperledger.composer.system.Grower#billy@gmail.com"
    operation: ALL
    resource(r): "org.acme.shipping.Contract"
    condition: (r.grower.getIdentifier() === p.getIdentifier())
    action: ALLOW
}

Rule này cho phép Billy có thể xóa Contract mà anh ta tham gia tương tự với các asset khác. Ở đây ta thấy có sự thiết lập điều kiện (p) và (r).
Tại dòng condition: r.grower.getIdentifier() sẽ xác định chủ của contract dựa được lưu trong contract; so sánh với p.getIdentifier() - đối tượng trong participant được kiểm soát bởi rule (ở đây trả về là identifier của Billy - billy@gmail.com). Nếu chúng giống nhau, rule sẽ được xét cho đối tượng đang đề cập tới.

Có một lưu ý quan trọng: các rule sẽ được thực thi từ trên xuống dưới, do đó ta cần sắp xếp rule hợp lý để nó thực hiện đúng theo chủ đích.

Sau khi các rule được xét, hệ thống sẽ thực thi và cho phép hoặc không cho phép đối tượng thực thi hành động.


Nhận xét

Bài đăng phổ biến từ blog này

#7 Phương pháp xác định nhanh 6 mẫu âm giai trong Guitar Lead

Làm Chủ 7 Mode Trong Guitar Lead [Chơi ở tất cả các Tone]

Hướng dẫn Django - Python - Day 5: Static Files