RBAC с узором
Быстрый старт
использовать шаблон в
g(_,_)
e, _ := NewEnforcer("./example.conf", "./example.csv")
e.AddNamedMatchingFunc("g","KeyMatch2",util.KeyMatch2)использовать шаблон с доменом
e.AddNamedDomainMatchingFunc("g","KeyMatch2",util.KeyMatch2)
использовать все шаблоны
просто комбинированное использование двух API
As shown above, after you create the enforcer
instance, you need to activate pattern matching via AddNamedMatchingFunc
and AddNamedDomainMatchingFunc
API, which determine how the pattern matches.
::note
Если вы используете онлайн редактор, в левом нижнем углу задается функция соответствия шаблона.
:::
Использовать подходящий шаблон в 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
может читать все книги, в том числе книга 1
и книга 2
. Но могут быть тысячи книг, и очень утомительно добавить каждую книгу в роль (или группу) с правилом г
.
Но с помощью функций соответствия шаблонов, вы можете написать политику только одной строкой:
g, /book/:id, book_group
Касбин будет автоматически соответствовать /book/1
и /book/2
в шаблоне /book/:id
для вас. Вам нужно только зарегистрировать функцию с силом:
- Go
- Node.js
e.AddNamedMatchingFunc("g","KeyMatch2",util.KeyMatch2)
await e.addNamedMatchingFunc('g', Util.keyMatch2Func);
При использовании функции сопоставления шаблонов в доменах/арендаторах, Вам нужно зарегистрировать функцию для усиления и модели.
- 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
. Так что именно так и работает. Полный пример можно посмотреть здесь.
Кроме синтаксиса совпадения шаблона, мы также можем использовать шаблон чистого домена.
Например, если мы хотим, чтобы под
имели доступ к различным доменам, домена1
и домена2
, мы можем использовать шаблон чистого домена:
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
В этом примере мы хотим, чтобы улыбались
для чтения и записи данных
в домена1 и домена2, шаблон, совпадающий *
в g
делает alice
имеет доступ к двум доменам.
С помощью шаблона сопоставления, особенно в сценариях, которые сложнее и Есть много доменов или объектов, которые нам нужно учитывать, мы можем реализовать policy_definition
более элегантным и эффективным.