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, которые определяют, как происходит сопоставление с шаблоном.
If you use the online editor, You can add a pattern matching function by clicking the "Add Role Matching" button in the lower left corner.

Используйте сопоставление с шаблоном в 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 доступ к двум доменам.
By using pattern matching, especially in scenarios that are more complicated and have a lot of domains or objects to consider, we can implement the policy_definition in a more elegant and effective way.