Bỏ qua đến nội dung chính

RBAC with Pattern

Bắt đầu Nhanh

  • Sử dụng mẫu trong g(_, _).

    e, _ := NewEnforcer("./example.conf", "./example.csv")
    e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
  • Sử dụng mẫu với miền.

    e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
  • Sử dụng tất cả các mẫu.

    Chỉ cần kết hợp việc sử dụng cả hai API.

Như đã thấy ở trên, sau khi bạn tạo thực thể enforcer, bạn cần kích hoạt so khớp mẫu thông qua các API AddNamedMatchingFuncAddNamedDomainMatchingFunc, để xác định cách mẫu so khớp.

ghi chú

Nếu bạn sử dụng trình soạn thảo trực tuyến, nó chỉ định chức năng so khớp mẫu ở góc dưới bên trái. editor-tips

Sử dụng so khớp mẫu trong RBAC

Đôi khi, bạn muốn một số chủ thể, đối tượng, hoặc miền/đối tác với một mẫu cụ thể được tự động cấp một vai trò. Chức năng so khớp mẫu trong RBAC có thể giúp bạn làm điều đó. Chức năng so khớp mẫu chia sẻ các tham số và giá trị trả về giống như chức năng so khớp trước đó matcher function.

Chức năng so khớp mẫu hỗ trợ mỗi tham số của g.

Chúng tôi biết rằng bình thường RBAC được biểu diễn dưới dạng g(r.sub, p.sub) trong một so khớp. Sau đó chúng ta có thể sử dụng một chính sách như:

p, alice, book_group, read
g, /book/1, book_group
g, /book/2, book_group

Vì vậy alice có thể đọc tất cả các cuốn sách bao gồm book 1book 2. Nhưng có thể có hàng ngàn cuốn sách, và việc thêm từng cuốn sách vào vai trò sách (hoặc nhóm) với một quy tắc chính sách g là rất tẻ nhạt.

Nhưng với các hàm so khớp mẫu, bạn có thể viết chính sách chỉ với một dòng:

g, /book/:id, book_group

Casbin sẽ tự động so khớp /book/1/book/2 thành mẫu /book/:id cho bạn. Bạn chỉ cần đăng ký hàm với enforcer như sau:

e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)

Khi sử dụng hàm so khớp mẫu trong các miền/đối tượng thuê, bạn cần đăng ký hàm với enforcer và mô hình.

e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)

Nếu bạn không hiểu g(r.sub, p.sub, r.dom) có nghĩa là gì, vui lòng đọc rbac-with-domains. Tóm lại, g(r.sub, p.sub, r.dom) sẽ kiểm tra xem người dùng r.sub có vai trò p.sub trong miền r.dom hay không. Vậy đây là cách mà matcher hoạt động. Bạn có thể xem ví dụ đầy đủ tại đây.

Ngoài cú pháp so khớp mẫu như trên, chúng ta cũng có thể sử dụng mẫu miền thuần túy.

Ví dụ, nếu chúng ta muốn sub có quyền truy cập trong các miền khác nhau, domain1domain2, chúng ta có thể sử dụng mô hình miền thuần túy:

p, admin, domain1, data1, read
p, admin, domain1, data1, write
p, admin, domain2, data2, read
p, admin, domain2, data2, write

g, alice, admin, *
g, bob, admin, domain2

Trong ví dụ này, chúng ta muốn alice đọc và ghi data trong domain1 và domain2. Việc so khớp mẫu * trong g cho phép alice có quyền truy cập vào hai miền.

Bằng cách sử dụng so khớp mẫu, đặc biệt trong các tình huống phức tạp hơn và có nhiều miền hoặc đối tượng cần xem xét, chúng ta có thể triển khai policy_definition theo cách tinh tế và hiệu quả hơn.