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

RBAC with Domains

Định nghĩa Vai trò với Miền/Người thuê

Các vai trò RBAC trong Casbin có thể là toàn cục hoặc dành riêng cho miền. Các vai trò dành riêng cho miền có nghĩa là vai trò cho một người dùng có thể khác nhau khi người dùng đó ở trong các miền/người thuê khác nhau. Điều này rất hữu ích cho các hệ thống lớn như một đám mây, vì người dùng thường ở trong các người thuê khác nhau.

Định nghĩa vai trò với các miền/người thuê nên trông như thế này:

[role_definition]
g = _, _, _

Ký tự _ thứ ba đại diện cho tên của miền/người thuê, và phần này không nên thay đổi. Sau đó, chính sách có thể là:

p, admin, tenant1, data1, read
p, admin, tenant2, data2, read

g, alice, admin, tenant1
g, alice, user, tenant2

Điều này có nghĩa là vai trò admin trong tenant1 có thể đọc data1. Và alice có vai trò admin trong tenant1 và vai trò user trong tenant2. Do đó, cô ấy có thể đọc data1. Tuy nhiên, vì alice không phải là admin trong tenant2, cô ấy không thể đọc data2.

Sau đó, trong một bộ so khớp, bạn nên kiểm tra vai trò như sau:

[matchers]
m = g(r.sub, p.sub, r.dom) && r.dom == p.dom && r.obj == p.obj && r.act == p.act

Vui lòng tham khảo rbac_with_domains_model.conf để tìm ví dụ.

Quy ước Tên Token

Lưu ý: Theo quy ước, tên token miền trong định nghĩa chính sách là dom và được đặt làm token thứ hai (sub, dom, obj, act). Bây giờ, Golang Casbin hỗ trợ tên token tùy chỉnh và vị trí đặt. Nếu tên token miền là dom, token miền có thể được đặt ở vị trí tùy ý mà không cần hành động bổ sung. Nếu tên token miền không phải là dom, e.SetFieldIndex() cho constant.DomainIndex nên được gọi sau khi enforcer được khởi tạo, bất kể vị trí của nó.

# `domain` here for `dom`
[policy_definition]
p = sub, obj, act, domain
e.SetFieldIndex("p", constant.DomainIndex, 3) // index starts from 0
users := e.GetAllUsersByDomain("domain1") // without SetFieldIndex, it will raise an error