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 ที่มุมล่างซ้าย
ใช้การจับคู่ 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 เช่น:
- Go
- Node.js
e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedMatchingFunc('g', Util.keyMatch2Func);
เมื่อใช้ฟังก์ชันการจับคู่ pattern ใน domains/tenants, คุณต้องลงทะเบียนฟังก์ชันกับ enforcer และโมเดล
- Go
- Node.js
e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedDomainMatchingFunc('g', Util.keyMatch2Func);
หากคุณไม่เข้าใจว่า 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
ได้อย่างมีสไตล์และมีประสิทธิภาพมากขึ้น