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 AddNamedMatchingFunc
và AddNamedDomainMatchingFunc
, để xác định cách mẫu so khớp.
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.
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 1
và book 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
và /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:
- Go
- Node.js
e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedMatchingFunc('g', Util.keyMatch2Func);
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.
- Go
- Node.js
e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedDomainMatchingFunc('g', Util.keyMatch2Func);
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, domain1
và domain2
, 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.