RBAC with Pattern
Швидкий старт
Використовуйте зразок у
g(_, _)
.e, _ := NewEnforcer("./example.conf", "./example.csv")
e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)Використовуйте зразок з доменом.
e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
Використовуйте всі зразки.
Просто поєднайте використання обох API.
Як показано вище, після створення екземпляра enforcer
, вам потрібно активувати відповідність зразків через API AddNamedMatchingFunc
та AddNamedDomainMatchingFunc
, які визначають, як зразок відповідає.
Якщо ви користуєтеся онлайн-редактором, він вказує функцію відповідності зразків у нижньому лівому куті.
Використовуйте відповідність зразків у RBAC
Іноді ви хочете, щоб певні суб'єкти, об'єкти або домени/орендарі з певним зразком автоматично отримували роль. Функції відповідності зразків у RBAC можуть допомогти вам це зробити. Функція відповідності зразків має ті ж параметри та значення повернення, що й попередня функція відповідності.
Функція відповідності зразків підтримує кожен параметр g
.
Ми знаємо, що зазвичай RBAC виражається як g(r.sub, p.sub)
у відповіднику. Тоді ми можемо використовувати політику на кшталт:
p, alice, book_group, read
g, /book/1, book_group
g, /book/2, book_group
Отже, alice
може читати всі книги, включаючи book 1
та book 2
. Але може бути тисячі книг, і додавання кожної книги до ролі книги (або групи) з одним правилом політики g
є дуже втомливим.
Але з функціями відповідності зразків ви можете написати політику лише одним рядком:
g, /book/:id, book_group
Casbin автоматично відповідає /book/1
та /book/2
до зразка /book/:id
за вас. Вам лише потрібно зареєструвати функцію з enforcer
на кшталт:
- Go
- Node.js
e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedMatchingFunc('g', Util.keyMatch2Func);
При використанні функції відповідності зразків у доменах/орендарях, вам потрібно зареєструвати функцію з 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
. Отже, ось як працює відповідник. Ви можете побачити повний приклад тут.
Окрім вищезазначеного синтаксису відповідності зразків, ми також можемо використовувати чистий доменний зразок.
Наприклад, якщо ми хочемо, щоб sub
мав доступ у різних доменах, domain1
та domain2
, ми можемо використовувати чистий доменний зразок:
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. Відповідність зразків *
у g
дає alice
доступ до двох доменів.
Використовуючи відповідність зразків, особливо у складніших сценаріях, які мають багато доменів або об'єктів для розгляду, ми можемо реалізувати policy_definition
більш елегантним та ефективним способом.