Funktion
Funktionen in Matchern
Sie können sogar Funktionen in einem Matcher angeben, um diese mächtiger zu machen. Sie können die eingebauten Funktionen verwenden oder Ihre eigene Funktion angeben. Alle eingebauten Funktionen verwenden ein solches Format (außer keyGet
und keyGet2
):
bool function_name(string arg1, string arg2)
Gibt zurück, ob arg1
arg2
entspricht.
keyGet
und keyGet2
gibt den String zurück, der mit dem Platzhalter übereinstimmt, und gibt ""
zurück, falls nichts übereinstimmt.
Die unterstützten Funktionen sind:
Funktion | arg1 | arg2 | Beispiel |
---|---|---|---|
keymatch | ein URL-Pfad wie /alice_data/resource1 | ein URL-Pfad oder ein * Muster wie /alice_data/* | keymatch_model.conf/keymatch_policy.csv |
keyGet | ein URL-Pfad wie /alice_data/resource1 | ein URL-Pfad oder ein * Muster wie /alice_data/* | keyget_model.conf/keymatch_policy.csv |
keyMatch2 | ein URL-Pfad wie /alice_data/resource1 | ein URL-Pfad oder ein : Muster wie /alice_data/:resource | keymatch2_model.conf/keymatch2_policy.csv |
keyGet2 | ein URL-Pfad wie /alice_data/resource1 | ein URL-Pfad oder : Muster wie /alice_data/:resource | keyget2_model.conf/keymatch2_policy.csv |
keyMatch3 | ein URL-Pfad wie /alice_data/resource1 | ein URL-Pfad oder ein {} Muster wie /alice_data/{resource} | https://github.com/casbin/blob/277c1a2b85698272f764d71a94d2595a8d425915/util/builtin_operators_test.go#L171-L196 |
keyMatch4 | ein URL-Pfad wie /alice_data/123/book/123 | ein URL-Pfad oder ein {} Muster wie /alice_data/{id}/book/{id} | https://de.github.com/casbin/blob/277c1a2b85698272f764d71a94d2595a8d425915/util/builtin_operators_test.go#L208-L222 |
regexMatch | jede Zeichenkette | ein Muster für reguläre Ausdrücke | keymatch_model.conf/keymatch_policy.csv |
ipMatch | eine IP-Adresse wie 192.168.2.123 | eine IP-Adresse oder ein CIDR wie 192.168.2.0/24 | ipmatch_model.conf/ipmatch_policy.csv |
globMatch | ein pfadähnlicher Pfad wie /alice_data/resource1 | ein Glob-Muster wie /alice_data/* | https://github.com/casbin/blob/277c1a2b85698272f764d71a94d2595a8d425915/util/builtin_operators_test.go#L426-L466 |
Details zu obigen Funktionen finden Sie unter: https://github.com/casbin/casbin/blob/master/util/builtin_operators_test.go
So fügen Sie eine benutzerdefinierte Funktion hinzu
Bereiten Sie zuerst Ihre Funktion vor. Es benötigt mehrere Parameter und gibt einen Bool zurück:
func KeyMatch(key1 string, key2 string) bool {
i := strings. ndex(key2, "*")
if i == -1 {
return key1 == key2
}
if len(key1) > i {
return key1[:i] == key2[:i]
}
return key1 == key2[:i]
}
Dann wickeln Sie es mit Schnittstelle{}
Typen:
func KeyMatchFunc(args ...interface{}) {
name1 := args[0].(string)
name2 := args[1].(string)
.(string)
return (bool)(KeyMatch(name1, name2)), nil
}
Endlich registrieren Sie die Funktion beim Casbin Enforcer:
e.AddFunction("my_func", KeyMatchFunc)
Jetzt können Sie die Funktion in Ihrem Modell CONF wie folgt verwenden:
[matchers]
m = r.sub == p.sub && my_func(r.obj, p.obj) && r.act == p.act