Functions
Fungsi dalam pencocok
Anda bahkan dapat menentukan fungsi dalam pencocok untuk membuatnya lebih kuat. Anda dapat menggunakan fungsi bawaan atau menentukan fungsi Anda sendiri. Fungsi pencocokan kunci bawaan mengikuti format berikut:
bool function_name(string url, string pattern)
Mereka mengembalikan nilai boolean yang menunjukkan apakah url
cocok dengan pola
.
Fungsi bawaan yang didukung adalah:
Fungsi | url | pola | Contoh |
---|---|---|---|
keyMatch | jalur URL seperti /alice_data/resource1 | jalur URL atau pola * seperti /alice_data/* | keymatch_model.conf/keymatch_policy.csv |
keyMatch2 | jalur URL seperti /alice_data/resource1 | jalur URL atau pola : seperti /alice_data/:resource | keymatch2_model.conf/keymatch2_policy.csv |
keyMatch3 | jalur URL seperti /alice_data/resource1 | jalur URL atau pola {} seperti /alice_data/{resource} | https://github.com/casbin/casbin/blob/277c1a2b85698272f764d71a94d2595a8d425915/util/builtin_operators_test.go#L171-L196 |
keyMatch4 | jalur URL seperti /alice_data/123/book/123 | jalur URL atau pola {} seperti /alice_data/{id}/book/{id} | https://github.com/casbin/casbin/blob/277c1a2b85698272f764d71a94d2595a8d425915/util/builtin_operators_test.go#L208-L222 |
keyMatch5 | jalur URL seperti /alice_data/123/?status=1 | jalur URL, pola {} atau * seperti /alice_data/{id}/* | https://github.com/casbin/casbin/blob/1cde2646d10ad1190c0d784c3a1c0e1ace1b5bc9/util/builtin_operators_test.go#L485-L526 |
regexMatch | string apa saja | pola ekspresi reguler | keymatch_model.conf/keymatch_policy.csv |
ipMatch | alamat IP seperti 192.168.2.123 | alamat IP atau CIDR seperti 192.168.2.0/24 | ipmatch_model.conf/ipmatch_policy.csv |
globMatch | jalur seperti jalur /alice_data/resource1 | pola glob seperti /alice_data/* | https://github.com/casbin/casbin/blob/277c1a2b85698272f764d71a94d2595a8d425915/util/builtin_operators_test.go#L426-L466 |
Untuk fungsi-fungsi mendapatkan kunci, biasanya mereka mengambil tiga parameter (kecuali keyGet
):
bool function_name(string url, string pattern, string key_name)
Mereka akan mengembalikan nilai dari kunci key_name
jika cocok dengan pola, dan mengembalikan ""
jika tidak ada yang cocok.
Misalnya, KeyGet2("/resource1/action", "/:res/action", "res")
akan mengembalikan "resource1"
, dan KeyGet3("/resource1_admin/action", "/{res}_admin/*", "res")
akan mengembalikan "resource1"
.
Sebagai untuk KeyGet
, yang mengambil dua parameter, KeyGet("/resource1/action", "/*)
akan mengembalikan "resource1/action"
.
Fungsi | url | pola | key_name | contoh |
---|---|---|---|---|
keyGet | jalur URL seperti /proj/resource1 | jalur URL atau pola * seperti /proj/* | \ | keyget_model.conf/keymatch_policy.csv |
keyGet2 | jalur URL seperti /proj/resource1 | jalur URL atau pola : seperti /prooj/:resource | nama kunci yang ditentukan dalam pola | keyget2_model.conf/keymatch2_policy.csv |
keyGet3 | sebuah jalur URL seperti /proj/res3_admin/ | sebuah jalur URL atau pola {} seperti /proj/{resource}_admin/* | nama kunci yang ditentukan dalam pola | https://github.com/casbin/casbin/blob/7bd496f94f5a2739a392d333a9aaaa10ae397673/util/builtin_operators_test.go#L209-L247 |
Lihat detail untuk fungsi-fungsi di atas di: https://github.com/casbin/casbin/blob/master/util/builtin_operators_test.go
Cara menambahkan fungsi kustom
Pertama, siapkan fungsi Anda. Fungsi ini mengambil beberapa parameter dan mengembalikan nilai bool:
func KeyMatch(key1 string, key2 string) bool {
i := strings.Index(key2, "*")
if i == -1 {
return key1 == key2
}
if len(key1) > i {
return key1[:i] == key2[:i]
}
return key1 == key2[:i]
}
Kemudian, bungkus dengan tipe interface{}
:
func KeyMatchFunc(args ...interface{}) (interface{}, error) {
name1 := args[0].(string)
name2 := args[1].(string)
return (bool)(KeyMatch(name1, name2)), nil
}
Terakhir, daftarkan fungsi tersebut ke enforcer Casbin:
e.AddFunction("my_func", KeyMatchFunc)
Sekarang, Anda dapat menggunakan fungsi tersebut dalam model CONF Anda seperti ini:
[matchers]
m = r.sub == p.sub && my_func(r.obj, p.obj) && r.act == p.act