Pattern을 포함한 RBAC
빠른 시작
-
도메인 없이 —
g에 대한 매칭 함수를 등록하세요:e, _ := NewEnforcer("./example.conf", "./example.csv")e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2) -
도메인 포함 — 도메인 인식 API를 사용하세요:
e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2) -
둘 다 — 모델이 사용자-역할 및 도메인 매칭 모두에서 패턴을 사용하는 경우 두 API를 모두 호출하세요.
enforcer 생성 후 반드시 이러한 함수들을 호출해야 하며, 이들은 패턴 매칭이 평가되는 방식을 정의합니다.
온라인 에디터를 사용하는 경우, 왼쪽 하단 모서리의 "Add Role Matching" 버튼을 클릭하여 패턴 매칭 함수를 추가하세요.

패턴 매칭 작동 방식
패턴 매칭을 사용하면 단일 정책 줄로 많은 주체(subject), 대상(object), 또는 도메인(domain)에 매칭할 수 있습니다(예: /book/:id가 /book/1, /book/2와 매칭). 이 함수들은 matcher functions와 동일한 시그니처를 사용하며, g의 파라미터에 대해 등록합니다.
예: 패턴 매칭이 없다면 다음과 같이 작성할 수 있습니다:
p, alice, book_group, read
g, /book/1, book_group
g, /book/2, book_group
따라서 alice는 모든 책을 읽을 수 있지만, 책마다 하나의 g 줄이 필요합니다. 책이 많다면 대신 패턴을 사용하세요:
g, /book/:id, book_group
Casbin은 /book/1, /book/2 등을 /book/:id와 매칭합니다. 매칭 함수를 등록하세요:
e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedMatchingFunc('g', Util.keyMatch2Func);
도메인 패턴 매칭(예: g(r.sub, p.sub, r.dom))을 사용하려면:
e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedDomainMatchingFunc('g', Util.keyMatch2Func);
g(r.sub, p.sub, r.dom)의 의미는 RBAC with domains를 참조하세요. 전체 예제: model_test.go.
도메인 기반 패턴 매칭은 사용자 정의 도메인 토큰 이름을 지원합니다. dom 대신 tenant 또는 workspace와 같은 식별자를 사용할 수 있습니다. Casbin은 keyMatch와 같은 패턴 매칭 함수를 사용할 때 모델 정의에서 도메인 토큰 이름을 자동으로 감지합니다.
도메인 와일드카드: g의 도메인 위치에 와일드카드를 사용하여 모든 도메인에서 역할을 부여할 수 있습니다. 예시:
p, admin, domain1, data1, read
p, admin, domain1, data1, write
p, admin, domain2, data2, read
p, admin, domain2, data2, write
g, alice, admin, *
g, bob, admin, domain2
따라서 alice는 모든 도메인(*)에서 admin 역할을 가지며, bob은 domain2에서만 admin입니다. 패턴 매칭과 도메인 와일드카드는 도메인이나 리소스가 많을 때 정책을 간결하게 유지합니다.
Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.