Prioritätsmodell
Casbin unterstützt Laststrategien mit Priorität.
Richtlinie mit Priorität laden implizit
Es ist ganz einfach, die Ordnung bestimmt die Priorität, die Politik früher erschienen hat höhere Priorität.
model.conf:
[policy_effect]
e = priority(p.eft) || verweigern
Richtlinien mit Priorität explizit laden
Siehe: casbin#550
Der Name des Prioritäts-Tokens in der Definition der Politik muss "Priorität" sein, und der kleinere Prioritätswert hat eine höhere Priorität. Wenn ein nicht-numerisches Zeichen Priorität hat, wird es in der letzten sein, anstatt einen Fehler zu werfen. Nun unterstützt explizite Priorität nur AddPolicy
& AddPolicies
, falls UpdatePolicy
aufgerufen wurde, sollten Sie das Prioritätsattribute nicht ändern.
model.conf:
[request_definition]
r = sub, obj, act
[policy_definition]
p = Priorität, sub, obj, act, eft
[role_definition]
g = _, _
[policy_effect]
e = priority(p. ft) || lehne
[matchers]
m = g(r.sub, p. ub) && r.obj == p.obj && r.act == p.act
policy.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 erlauben
p, 1, alice, data1, write, allow
p, 1, alice, data1, read, allow
p, 1, bob, data2, lesen, lehne
g, bob, data2_allow_group
g, alice, data1_deny_group
anfragen:
alice, data1, write --> true // für `p, 1, alice, data1, write, write allow` hat die höchste Priorität
bob, data2, read --> false
bob, data2, write --> true // für bob hat die Rolle von `data2_allow_group` welche das Recht hat, Daten zu schreiben, und es gibt keine leugnen Richtlinie mit höherer Priorität
Richtlinien mit Priorität basierend auf Rolle und BenutzerHierarchie laden
Die geerbte Struktur von Rollen und Benutzern kann nur mehrere Bäume und nicht Graphen. Wenn ein Benutzer mehrere Rollen hat, müssen Sie sicherstellen, dass der Benutzer das gleiche Level in verschiedenen Bäumen hat. Wenn zwei Rollen die gleiche Ebene haben, hat die Politik (die Rolle korrespondierend) eine höhere Priorität. weitere Details siehe casbin#833
model.conf:
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, handeln, handeln eft
[role_definition]
g = _, _
[policy_effect]
e = subjectPriority(p. ft) || lehne
[matchers]
m = g(r.sub, p. ub) && r.obj == p.obj && r.act == p.act
policy.csv
p, root, data1, lesen, verweigern
p, admin, data1, lesen, verweigern
p, editor, data1, lesen, verweigern
p, Abonnent, data1, lesen,
p, jane, data1, lesen, verweigern erlauben
p, alice, data1, lesen,
g, admin, root
g, editor, zulassen admin
g, Abonnent, Admin
g, jane, Editor
g, alice, Abonnent
Anfrage:
jane, data1, read --> true // jane steht ganz unten. Die Priorität ist also höher als der Editor, admin und root
alice, data1, lesen --> true
Die Rollenhierarchie wie folgt:
rote: root
<unk> <unk> Rolle: admin
<unk> <unk> Rollen-Editor
<unk> <unk> <unk> <unk> <unk> Benutzer: jane
<unk>
<unk> Rolle: Abonnent
<unk> <unk> <unk> <unk> Benutzer: john
Die Priorität automatisch folgendermaßen:
role: root # automatische Priorität: 30
<unk> <unk> Rolle: admin # automatische Priorität: 20
<unk> <unk> Rolle: Editor # automatische Priorität: 10
<unk> <unk> Rolle: Abonnent # automatische Priorität: 10