본문으로 건너뛰기

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" 버튼을 클릭하여 패턴 매칭 함수를 추가하세요. editor-tips

패턴 매칭 작동 방식​

패턴 매칭을 사용하면 단일 정책 줄로 많은 주체(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)

도메인 패턴 매칭(예: g(r.sub, p.sub, r.dom))을 사용하려면:

e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)

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.