RBAC с шаблонами
Быстрый старт
-
Без доменов — Зарегистрируйте функцию сопоставления для
g:e, _ := NewEnforcer("./example.conf", "./example.csv")e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2) -
С доменами — Используйте API, учитывающий домены:
e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2) -
Оба случая — Вызывайте оба API, если ваша модель использует шаблоны как для сопоставления «пользователь–роль», так и для сопоставления доменов.
Эти функции необходимо вызывать после создания энфорсера; они определяют способ вычисления шаблонного сопоставления.
Если вы используете онлайн-редактор, добавьте функцию шаблонного сопоставления, нажав кнопку "Add Role Matching" в левом нижнем углу.

Как работает шаблонное сопоставление
Шаблонное сопоставление позволяет одной строке политики соответствовать множеству субъектов, объектов или доменов (например, /book/:id соответствует /book/1, /book/2). Эти функции используют ту же сигнатуру, что и функции матчера; вы регистрируете их для параметров g.
Пример: без шаблонного сопоставления вам пришлось бы написать:
p, alice, book_group, read
g, /book/1, book_group
g, /book/2, book_group
Так alice может читать любую книгу, но вам нужна одна строка g для каждой книги. Для множества книг используйте вместо этого шаблон:
g, /book/:id, book_group
Затем Casbin сопоставит /book/1, /book/2 и т. д. с /book/:id. Зарегистрируйте функцию сопоставления:
e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedMatchingFunc('g', Util.keyMatch2Func);
Для шаблонного сопоставления доменов (например, g(r.sub, p.sub, r.dom)), используйте:
e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedDomainMatchingFunc('g', Util.keyMatch2Func);
О значении g(r.sub, p.sub, r.dom) см. RBAC с доменами. Полный пример: model_test.go.
Сопоставление с образцом для доменов поддерживает пользовательские имена токенов домена. Вместо dom можно использовать любой идентификатор, например tenant или workspace. Casbin автоматически определяет имя токена домена из определения модели при использовании функций сопоставления с образцом, таких как keyMatch.
Подстановочные знаки в домене: вы можете использовать подстановочный знак в позиции домена в g, чтобы предоставить роль во всех доменах. Пример:
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 есть роль admin в каждом домене (*), а bob является admin только в domain2. Сопоставление с образцом и подстановочные знаки в домене позволяют сохранять политики короткими, когда у вас много доменов или ресурсов.
Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.