본문으로 건너뛰기

Functions

Functions in matchers​

matcher에서 내장 함수를 사용하거나 자체 함수를 등록할 수 있습니다. 내장 키 매칭 함수의 형식은 다음과 같습니다:

bool function_name(string url, string pattern)

이들은 url이 pattern과 일치하는지 여부를 반환합니다.

사용 가능한 내장 함수:

FunctionurlpatternExample
keyMatch/alice_data/resource1과 같은 URL 경로/alice_data/*와 같은 URL 경로 또는 * 패턴keymatch_model.conf/keymatch_policy.csv
keyMatch2/alice_data/resource1와 같은 URL 경로/alice_data/:resource와 같은 URL 경로 또는 : 패턴keymatch2_model.conf/keymatch2_policy.csv
keyMatch3/alice_data/resource1와 같은 URL 경로/alice_data/{resource}와 같은 URL 경로 또는 {} 패턴https://github.com/apache/casbin/blob/277c1a2b85698272f764d71a94d2595a8d425915/util/builtin_operators_test.go#L171-L196
keyMatch4/alice_data/123/book/123와 같은 URL 경로/alice_data/{id}/book/{id}와 같은 URL 경로 또는 {} 패턴https://github.com/apache/casbin/blob/277c1a2b85698272f764d71a94d2595a8d425915/util/builtin_operators_test.go#L208-L222
keyMatch5/alice_data/123/?status=1와 같은 URL 경로/alice_data/{id}/*와 같은 URL 경로, {} 또는 * 패턴https://github.com/apache/casbin/blob/1cde2646d10ad1190c0d784c3a1c0e1ace1b5bc9/util/builtin_operators_test.go#L485-L526
regexMatch모든 문자열정규식 패턴keymatch_model.conf/keymatch_policy.csv
ipMatch192.168.2.123과 같은 IP 주소192.168.2.0/24와 같은 IP 주소 또는 CIDRipmatch_model.conf/ipmatch_policy.csv
globMatch/alice_data/resource1와 같은 경로 형태인 경로/alice_data/*와 같은 glob 패턴https://github.com/apache/casbin/blob/277c1a2b85698272f764d71a94d2595a8d425915/util/builtin_operators_test.go#L426-L466

키 추출 함수는 세 개의 매개변수를 받습니다(keyGet은 두 개를 받음):

bool function_name(string url, string pattern, string key_name)

URL이 패턴과 일치할 때 지정된 키의 값을 반환하며, 그렇지 않으면 ""을 반환합니다.

예시:

  • KeyGet2("/resource1/action", "/:res/action", "res") → "resource1"
  • KeyGet3("/resource1_admin/action", "/{res}_admin/*", "res") → "resource1"
  • KeyGet("/resource1/action", "/*") → "resource1/action" (두 매개변수 형식)
Functionurlpatternkey_nameexample
keyGet/proj/resource1와 같은 URL 경로/proj/*와 같은 URL 경로 또는 * 패턴\keyget_model.conf/keymatch_policy.csv
keyGet2/proj/resource1와 같은 URL 경로/proj/:resource와 같은 URL 경로 또는 : 패턴패턴에 지정된 키 이름keyget2_model.conf/keymatch2_policy.csv
keyGet3/proj/res3_admin/와 같은 URL 경로/proj/{resource}_admin/*와 같은 URL 경로 또는 {} 패턴패턴에 지정된 키 이름https://github.com/apache/casbin/blob/7bd496f94f5a2739a392d333a9aaaa10ae397673/util/builtin_operators_test.go#L209-L247

전체 함수 상세 정보: https://github.com/apache/casbin/blob/master/util/builtin_operators_test.go

사용자 정의 함수 추가​

  1. 필요한 인수를 받아 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]
    }
  2. Casbin용으로 래핑하세요(시그니처 func(...interface{}) (interface{}, error)):

    func KeyMatchFunc(args ...interface{}) (interface{}, error) {
    name1 := args[0].(string)
    name2 := args[1].(string)

    return (bool)(KeyMatch(name1, name2)), nil
    }
  3. enforcer에 등록하세요:

    e.AddFunction("my_func", KeyMatchFunc)
  4. 모델에서 사용하세요:

    [matchers]
    m = r.sub == p.sub && my_func(r.obj, p.obj) && r.act == p.act

Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.