RBAC with Domains
การกำหนดบทบาทโดยมีโดเมนผู้เช่า
บทบาท RBAC ใน Casbin สามารถเป็นแบบสากลหรือเฉพาะโดเมนได้ บทบาทเฉพาะโดเมนหมายความว่าบทบาทของผู้ใช้สามารถแตกต่างกันได้เมื่อผู้ใช้อยู่ในโดเมน/ผู้เช่าที่แตกต่างกัน นี่เป็นสิ่งที่มีประโยชน์มากสำหรับระบบขนาดใหญ่เช่นคลาวด์ เนื่องจากผู้ใช้มักจะอยู่ในผู้เช่าที่แตกต่างกัน
การกำหนดบทบาทกับโดเมน/ผู้เช่าควรมีลักษณะดังนี้:
[role_definition]
g = _, _, _
ขีดล่างที่สาม _
แทนชื่อของโดเมน/ผู้เช่า และส่วนนี้ไม่ควรเปลี่ยนแปลง จากนั้นนโยบายสามารถเป็นดังนี้:
p, admin, tenant1, data1, read
p, admin, tenant2, data2, read
g, alice, admin, tenant1
g, alice, user, tenant2
นี่หมายความว่าบทบาท admin
ใน tenant1
สามารถอ่าน data1
และ alice
มีบทบาท admin
ใน tenant1
และบทบาท user
ใน tenant2
ดังนั้น เธอสามารถอ่าน data1
อย่างไรก็ตาม เนื่องจาก alice
ไม่ใช่ admin
ใน tenant2
เธอไม่สามารถอ่าน data2
จากนั้น ในตัวตรงกัน คุณควรตรวจสอบบทบาทดังนี้:
[matchers]
m = g(r.sub, p.sub, r.dom) && r.dom == p.dom && r.obj == p.obj && r.act == p.act
โปรดดูตัวอย่างที่ rbac_with_domains_model.conf
หมายเหตุ: โดยปกติ ชื่อโทเค็นโดเมนในการกำหนดนโยบายคือ dom
และวางเป็นโทเค็นที่สอง (sub, dom, obj, act
)
ตอนนี้ Golang Casbin รองรับการกำหนดชื่อโทเค็นและตำแหน่งที่กำหนดเองได้ หากชื่อโทเค็นโดเมนคือ dom
โทเค็นโดเมนสามารถวางได้ที่ตำแหน่งใดก็ได้โดยไม่ต้องมีการกระทำเพิ่มเติม หากชื่อโทเค็นโดเมนไม่ใช่ dom
ควรเรียก e.SetFieldIndex()
สำหรับ constant.DomainIndex
หลังจากที่ตัวบังคับนโยบายถูกเริ่มต้น ไม่ว่าจะอยู่ในตำแหน่งใดก็ตาม
# `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