Приоритетная модель
Касбин поддерживает загрузку политики с приоритетом.
Загрузить политику с приоритетным неявкой
Это довольно просто, порядок определяет приоритет, политика появилась раньше, имеет более высокий приоритет.
модель.conf:
[policy_effect]
e = priority(p.eft) || Отклонить
Загрузить политику с приоритетом
Также посмотрите: casbin#550
Имя маркера приоритета в определении политики должно быть «приоритет», а меньшее значение приоритета будет иметь более высокий приоритет. Если в приоритете присутствует нечисловой символ, то он будет в последнем, а не бросать ошибку. Теперь явный приоритет только поддерживает AddPolicy
& AddPolicies
, если было вызвано UpdatePolicy
, вы не должны изменять атрибут приоритета.
модель.conf:
[request_definition]
r = под, obj, действовать
[policy_definition]
p = приоритет, sub, obj, act, eft
[role_definition]
g = _, _
[policy_effect]
e = priority(стр. ft) || Отрицать
[matchers]
м = g(r.sub, p. ub) && r.obj == p.obj && r.act == p.act
политика.csv
p, 10, data1_deny_group, data1, read, deny
p, 10, data1_deny_group, data1, write, deny
p, 10, data2_allow_group, data2, read, allow
p, 10, data2_allow_group, data2, write, разрешить
p, 1, alice, data1, write, allow
p, 1, alice, data1, read, allow
p, 1, bob, data2, read, deny
g, bob, data2_allow_group
g, alice, data1_deny_group
запрос:
alice, data1, write --> true // for `p, 1, alice, data1, write, allow` имеет приоритет
bob, data2, read --> false
bob, data2, напишите --> true // для bob имеет роль `data2_allow_group`, который имеет право записать data2, и не существует политики отрицания с более высоким приоритетом
Загрузить политику с приоритетом на основе роли и иерархии пользователей
Унаследованная структура ролей и пользователей может быть только несколькими деревьями, а не графиками. Если у одного пользователя несколько ролей, вы должны убедиться, что у пользователя одинаковый уровень в разных деревьях. Если две роли имеют один и тот же уровень, то политика (соответствующая роль) появилась раньше, имеет более высокий приоритет. подробности также см. casbin#833
модель.conf:
[request_definition]
r = sub, obj, действовать
[policy_definition]
p = sub, obj, act, eft
[role_definition]
g = _, _
[policy_effect]
e = subjectPriority(стр. ft) || Отрицать
[matchers]
м = g(r.sub, p. ub) && r.obj == p.obj && r.act == p.act
политика.csv
p, root, data1, read, deny
p, admin, data1, read, deny
p, editor, data1, read, deny
p, subscriber, data1, read, deny
p, jane, data1, read, разрешить
p, alice, data1, read, allow
g, admin, root
g, редактор, admin
g, подписчик, администратор
g, jane, редактор
g, alice, подписчик
Запрос:
jane, data1, read --> true // jane is at the bottom,so priority is higher than editor, admin and root
alice, data1, read --> true
Роль иерархии вроде этого:
роль: корень
<unk> -роль: администратор
<unk> -редактор ролей
<unk> <unk> -<unk> -пользователь: jane
<unk>
<unk> -роль: подписчик
<unk> -пользователь: john
Приоритет автоматически выглядит так:
роль: корень # приоритет: 30
<unk> - роль: admin # auto приоритет: 20
<unk> -роль: редактор # auto приоритет: 10
<unk> -роль: подписка # auto приоритет: 10