Перейти до основного контенту

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, які визначають, як зразок відповідає.

примітка

Якщо ви користуєтеся онлайн-редактором, він вказує функцію відповідності зразків у нижньому лівому куті. editor-tips

Використовуйте відповідність зразків у 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 на кшталт:

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

При використанні функції відповідності зразків у доменах/орендарях, вам потрібно зареєструвати функцію з 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. Отже, ось як працює відповідник. Ви можете побачити повний приклад тут.

Окрім вищезазначеного синтаксису відповідності зразків, ми також можемо використовувати чистий доменний зразок.

Наприклад, якщо ми хочемо, щоб 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 більш елегантним та ефективним способом.