Functions
マッチャーの関数
マッチャーに関数を指定して、より強力にすることもできます。 組み込み関数を使用するか、自分で関数を指定することができます。 組み込みのキーマッチング関数は次の形式を取ります:
bool function_name(string url, string pattern)
url
がpattern
と一致するかどうかを示すブール値を返します。
サポートされている組み込み関数は次のとおりです:
キー取得関数については、通常3つのパラメータ(keyGet
を除く)を取ります:
bool function_name(string url, string pattern, string key_name)
それらは、パターンに一致する場合にキーkey_name
の値を返し、何も一致しない場合は""
を返します。
例えば、KeyGet2("/resource1/action", "/:res/action", "res")
は"resource1"
を返し、KeyGet3("/resource1_admin/action", "/{res}_admin/*", "res")
は"resource1"
を返します。
KeyGet
については、2つのパラメータを取るため、KeyGet("/resource1/action", "/*)
は"resource1/action"
を返します。
関数 | url | パターン | key_name | 例 |
---|---|---|---|---|
keyGet | /proj/resource1 のようなURLパス | /proj/* のようなURLパスまたは* パターン | \ | keyget_model.conf/keymatch_policy.csv |
keyGet2 | /proj/resource1 のようなURLパス | /prooj/:resource のようなURLパスまたは: パターン | パターンで指定されたキー名 | keyget2_model.conf/keymatch2_policy.csv |
keyGet3 | 「/proj/res3_admin/」のようなURLパス | 「/proj/{resource}_admin/*」のようなURLパスまたは「{}」パターン | パターンで指定されたキー名 | https://github.com/casbin/casbin/blob/7bd496f94f5a2739a392d333a9aaaa10ae397673/util/builtin_operators_test.go#L209-L247 |
上記の関数の詳細はこちらでご覧いただけます:https://github.com/casbin/casbin/blob/master/util/builtin_operators_test.go
カスタマイズした関数の追加方法
まず、あなたの関数を準備します。 それはいくつかのパラメータを取り、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]
}
次に、それをinterface{}
型でラップします:
func KeyMatchFunc(args ...interface{}) (interface{}, error) {
name1 := args[0].(string)
name2 := args[1].(string)
return (bool)(KeyMatch(name1, name2)), nil
}
最後に、関数をCasbinエンフォーサーに登録します:
e.AddFunction("my_func", KeyMatchFunc)
これで、あなたのモデルCONFでこのように関数を使用できます:
[matchers]
m = r.sub == p.sub && my_func(r.obj, p.obj) && r.act == p.act