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

RBAC with Pattern

เริ่มต้นอย่างรวดเร็ว

  • ใช้ pattern ใน g(_, _)

    e, _ := NewEnforcer("./example.conf", "./example.csv")
    e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
  • ใช้ pattern กับโดเมน

    e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
  • ใช้ pattern ทั้งหมด

    เพียงรวมการใช้งานของทั้งสอง APIs

ตามที่แสดงข้างต้น, หลังจากคุณสร้างตัวอย่าง enforcer, คุณต้องเปิดใช้งานการจับคู่ pattern ผ่าน APIs AddNamedMatchingFunc และ AddNamedDomainMatchingFunc, ซึ่งกำหนดวิธีการจับคู่ pattern

หมายเหตุ

หากคุณใช้ตัวแก้ไขออนไลน์, มันระบุฟังก์ชันการจับคู่ pattern ที่มุมล่างซ้าย editor-tips

ใช้การจับคู่ pattern ใน RBAC

บางครั้ง, คุณต้องการให้บาง subjects, objects, หรือ domains/tenants ที่มี pattern ที่เฉพาะเจาะจงได้รับบทบาทโดยอัตโนมัติ ฟังก์ชันการจับคู่ pattern ใน RBAC สามารถช่วยคุณทำสิ่งนั้นได้ ฟังก์ชันการจับคู่ pattern มีพารามิเตอร์และค่าคืนเหมือนกับ ฟังก์ชัน matcher ก่อนหน้านี้

ฟังก์ชันการจับคู่ pattern รองรับพารามิเตอร์แต่ละอย่างของ g

เรารู้ว่าปกติ RBAC ถูกแสดงเป็น g(r.sub, p.sub) ใน matcher จากนั้นเราสามารถใช้นโยบายเช่น:

p, alice, book_group, read
g, /book/1, book_group
g, /book/2, book_group

ดังนั้น alice สามารถอ่านหนังสือทั้งหมดรวมถึง book 1 และ book 2 แต่อาจมีหนังสือหลายพันเล่ม, และมันเป็นเรื่องน่าเบื่อมากที่จะเพิ่มแต่ละเล่มเข้าไปในบทบาทหนังสือ (หรือกลุ่ม) ด้วยกฎนโยบาย g แต่ละข้อ

แต่ด้วยฟังก์ชันการจับคู่ pattern, คุณสามารถเขียนนโยบายด้วยเพียงหนึ่งบรรทัด:

g, /book/:id, book_group

Casbin จะจับคู่อัตโนมัติ /book/1 และ /book/2 เข้ากับ pattern /book/:id ให้คุณ คุณเพียงแค่ต้องลงทะเบียนฟังก์ชันกับ enforcer เช่น:

e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)

เมื่อใช้ฟังก์ชันการจับคู่ pattern ใน domains/tenants, คุณต้องลงทะเบียนฟังก์ชันกับ enforcer และโมเดล

e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)

หากคุณไม่เข้าใจว่า g(r.sub, p.sub, r.dom) หมายถึงอะไร, กรุณาอ่าน rbac-with-domains โดยสรุป, g(r.sub, p.sub, r.dom) จะตรวจสอบว่าผู้ใช้ r.sub มีบทบาท p.sub ในโดเมน r.dom ดังนั้นนี่คือวิธีการทำงานของ matcher คุณสามารถดูตัวอย่างเต็ม ที่นี่

นอกจาก syntax การจับคู่ pattern ข้างต้น, เรายังสามารถใช้ pure domain pattern

ตัวอย่างเช่น, หากเราต้องการให้ sub มีสิทธิ์เข้าถึงในโดเมนต่างๆ, domain1 และ domain2, เราสามารถใช้ pure domain pattern:

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

ในตัวอย่างนี้, เราต้องการให้ alice อ่านและเขียน data ใน domain1 และ domain2 การจับคู่ pattern * ใน g ทำให้ alice มีสิทธิ์เข้าถึงสองโดเมน

โดยการใช้การจับคู่ pattern, โดยเฉพาะในสถานการณ์ที่ซับซ้อนมากขึ้นและมีโดเมนหรือวัตถุมากมายที่ต้องพิจารณา, เราสามารถนำเสนอ policy_definition ได้อย่างมีสไตล์และมีประสิทธิภาพมากขึ้น