RBAC with Pattern
빠른 시작
g(_, _)
에서 패턴 사용.e, _ := NewEnforcer("./example.conf", "./example.csv")
e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)도메인에서 패턴 사용.
e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
모든 패턴 사용.
두 API의 사용을 결합하기만 하면 됩니다.
위에서 보여진 것처럼, enforcer
인스턴스를 생성한 후에는 AddNamedMatchingFunc
및 AddNamedDomainMatchingFunc
API를 통해 패턴 매칭을 활성화해야 합니다. 이들은 패턴이 어떻게 매칭되는지를 결정합니다.
If you use the online editor, You can add a pattern matching function by clicking the "Add Role Matching" button in the lower left corner.
RBAC에서 패턴 매칭 사용
때때로, 특정 주체, 객체, 또는 특정 패턴을 가진 도메인/테넌트가 자동으로 역할을 부여받기를 원할 수 있습니다. RBAC의 패턴 매칭 함수는 이를 도와줄 수 있습니다. 패턴 매칭 함수는 이전의 매처 함수와 동일한 매개변수와 반환 값을 공유합니다.
g
의 각 매개변수를 지원하는 패턴 매칭 함수.
우리는 일반적으로 RBAC가 매처에서 g(r.sub, p.sub)
로 표현된다는 것을 알고 있습니다. 그런 다음 우리는 다음과 같은 정책을 사용할 수 있습니다:
p, alice, book_group, read
g, /book/1, book_group
g, /book/2, book_group
그래서 alice
는 book 1
과 book 2
를 포함한 모든 책을 읽을 수 있습니다. 그러나 수천 권의 책이 있을 수 있고, 각 책을 책 역할(또는 그룹)에 g
정책 규칙으로 추가하는 것은 매우 지루할 수 있습니다.
그러나 패턴 매칭 함수를 사용하면, 단 한 줄로 정책을 작성할 수 있습니다:
g, /book/:id, book_group
Casbin은 자동으로 /book/1
과 /book/2
를 패턴 /book/:id
에 매칭시켜줍니다. 당신은 단지 다음과 같이 enforcer에 함수를 등록할 필요가 있습니다:
- Go
- Node.js
e.AddNamedMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedMatchingFunc('g', Util.keyMatch2Func);
도메인/테넌트에서 패턴 매칭 함수를 사용할 때, 함수를 enforcer와 모델에 등록해야 합니다.
- Go
- Node.js
e.AddNamedDomainMatchingFunc("g", "KeyMatch2", util.KeyMatch2)
await e.addNamedDomainMatchingFunc('g', Util.keyMatch2Func);
g(r.sub, p.sub, r.dom)
이 무엇을 의미하는지 이해하지 못한다면, rbac-with-domains를 읽어보세요. 간단히 말해서, g(r.sub, p.sub, r.dom)
은 사용자 r.sub
가 도메인 r.dom
에서 역할 p.sub
를 가지고 있는지 확인합니다. 그래서 이것이 매처가 어떻게 작동하는지입니다. 전체 예제는 여기에서 볼 수 있습니다.
위의 패턴 매칭 구문 외에도, 우리는 순수 도메인 패턴을 사용할 수도 있습니다.
예를 들어, sub
가 domain1
과 domain2
라는 다른 도메인에서 접근 권한을 가지길 원한다면, 순수 도메인 패턴을 사용할 수 있습니다:
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
가 domain1과 domain2에서 data
를 읽고 쓸 수 있도록 하고 싶습니다. g
에서 패턴 매칭 *
을 사용하면 alice
가 두 도메인에 접근할 수 있게 됩니다.
패턴 매칭을 사용하면, 특히 더 복잡하고 고려해야 할 도메인이나 객체가 많은 시나리오에서, 우리는 policy_definition
을 더 우아하고 효과적인 방법으로 구현할 수 있습니다.