ข้ามไปยังเนื้อหาหลัก

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