RBAC с узором
Быстрый старт
Use pattern in
g(_, _)
.e, _ := NewEnforcer("./example.conf", "./example.csv")
e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)Use pattern with domain.
e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
Use all patterns.
Just combine the use of both APIs.
As shown above, after you create the enforcer
instance, you need to activate pattern matching via the AddNamedMatchingFunc
and AddNamedDomainMatchingFunc
APIs, which determine how the pattern matches.
::note
Если вы используете онлайн редактор, в левом нижнем углу задается функция соответствия шаблона.
:::
Использовать подходящий шаблон в RBAC
Sometimes, you want certain subjects, objects, or domains/tenants with a specific pattern to be automatically granted a role. Функции сопоставления шаблонов в RBAC могут помочь вам в этом. Шаблон совпадающий с функцией разделяет те же параметры и возвращает значение, что и предыдущая функция.
The pattern matching function supports each parameter of g
.
We know that normally RBAC is expressed as g(r.sub, p.sub)
in a matcher. Then we can use a policy like:
p, alice, book_group, read
g, /book/1, book_group
g, /book/2, book_group
Поэтому alice
может читать все книги, в том числе книга 1
и книга 2
. But there can be thousands of books, and it's very tedious to add each book to the book role (or group) with one g
policy rule.
Но с помощью функций соответствия шаблонов, вы можете написать политику только одной строкой:
g, /book/:id, book_group
Casbin will automatically match /book/1
and /book/2
into the pattern /book/:id
for you. Вам нужно только зарегистрировать функцию с силом:
- Go
- Node.js
e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedMatchingFunc('g', Util.keyMatch2Func);
When using a pattern matching function in domains/tenants, you need to register the function with the enforcer and model.
- 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. ub
имеет роль p.sub
в домене r.dom
. So this is how the matcher works. Полный пример можно посмотреть здесь.
Кроме синтаксиса совпадения шаблона, мы также можем использовать шаблон чистого домена.
For example, if we want sub
to have access in different domains, domain1
and domain2
, we can use the 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
In this example, we want alice
to read and write data
in domain1 and domain2. Pattern matching *
in g
makes alice
have access to two domains.
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.