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