
ACL, RBAC, ABAC 및 사용자 지정 접근 제어 모델을 적용하며, 애플리케이션 및 서비스를 위한 RESTful 매칭 및 정책 관리 API를 제공하는 권한 부여 라이브러리입니다.
뉴스: 올바른 Apache Casbin 정책을 작성하는 방법이 아직도 고민되시나요? Apache Casbin 온라인 에디터가 도와드립니다! https://casbin.apache.org/editor/ 에서 사용해 보세요!

Apache Casbin은 Golang 프로젝트를 위한 강력하고 효율적인 오픈소스 접근 제어 라이브러리입니다. 다양한 접근 제어 모델을 기반으로 인가(권한 부여)를 강제하는 것을 지원합니다.
write-article, read-log 같은 권한을 사용하여 리소스 유형을 대상으로 할 수 있습니다. 특정 기사나 로그에 대한 접근을 제어하지 않습니다.resource.Owner 같은 문법 설탕을 사용하여 리소스의 속성을 가져올 수 있습니다./res/*, /res/:id 같은 경로와 GET, POST, PUT, DELETE 같은 HTTP 메서드를 지원합니다.Casbin에서 접근 제어 모델은 **PERM 메타모델(Policy, Effect, Request, Matchers)**을 기반으로 CONF 파일로 추상화됩니다. 따라서 프로젝트의 인가 메커니즘을 전환하거나 업그레이드하는 것은 구성을 수정하는 것만큼 간단합니다. 사용 가능한 모델을 결합하여 자신만의 접근 제어 모델을 맞춤 설정할 수 있습니다. 예를 들어, 하나의 모델 안에 RBAC 역할과 ABAC 속성을 함께 사용하고 하나의 정책 규칙 집합을 공유할 수 있습니다.
Casbin에서 가장 기본적이고 단순한 모델은 ACL입니다. ACL 모델 CONF는 다음과 같습니다:
# Request definition
[request_definition]
r = sub, obj, act
# Policy definition
[policy_definition]
p = sub, obj, act
# Policy effect
[policy_effect]
e = some(where (p.eft == allow))
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
ACL 모델의 예제 정책은 다음과 같습니다:
p, alice, data1, read
p, bob, data2, write
의미는 다음과 같습니다:
또한 끝에 '\'를 붙여 여러 줄 모드를 지원합니다:
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj \
&& r.act == p.act
또한 ABAC를 사용하는 경우 Casbin golang 버전에서는 다음과 같이 in 연산자를 사용할 수 있습니다 (jCasbin과 Node-Casbin은 아직 지원되지 않습니다):
# Matchers
[matchers]
m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')
하지만 배열의 길이가 1보다 커야 합니다. 그렇지 않으면 패닉(panic)이 발생할 수 있습니다.
더 많은 연산자를 보려면 govaluate를 참조하세요.
Apache Casbin이 하는 일:
{subject, object, action} 형식 또는 사용자가 정의한 사용자 지정 형식으로 정책을 강제하며, 허용 및 거부 인가를 모두 지원합니다.root 또는 administrator 같은 내장 슈퍼유저를 지원합니다. 슈퍼유저는 명시적인 권한 없이 무엇이든 할 수 있습니다.keyMatch는 리소스 키 /foo/bar를 패턴 /foo*에 매핑할 수 있습니다.Apache Casbin이 하지 않는 일:
username과 password를 확인하는 것)go get github.com/casbin/casbin/v3
https://casbin.apache.org/docs/overview
웹 브라우저에서 온라인 에디터(https://casbin.apache.org/editor/)를 사용하여 Casbin 모델과 정책을 작성할 수도 있습니다. 프로그래밍 언어용 IDE처럼 구문 강조 및 코드 완성 같은 기능을 제공합니다.
https://casbin.apache.org/docs/tutorials
모델 파일과 정책 파일로 Casbin enforcer를 생성합니다:
e, _ := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
참고: 파일 대신 DB의 정책으로 enforcer를 초기화할 수도 있습니다. 자세한 내용은 정책 영속화 섹션을 참조하세요.
접근이 발생하기 직전에 코드에 인가 후크를 추가합니다:
sub := "alice" // the user that wants to access a resource.
obj := "data1" // the resource that is going to be accessed.
act := "read" // the operation that the user performs on the resource.
if res, _ := e.Enforce(sub, obj, act); res {
// permit alice to read data1
} else {
// deny the request, show an error
}
정적 정책 파일 외에도 Apache Casbin은 런타임 시 권한 관리를 위한 API를 제공합니다. 예를 들어, 아래와 같이 사용자에게 할당된 모든 역할을 가져올 수 있습니다:
roles, _ := e.GetImplicitRolesForUser(sub)
더 많은 사용법은 정책 관리 API를 참조하세요.
Apache Casbin은 권한 관리를 위한 두 가지 API 세트를 제공합니다:
또한 모델 관리와 정책 관리를 위한 웹 기반 UI를 제공합니다:


https://casbin.apache.org/docs/adapters
https://casbin.apache.org/docs/watchers
https://casbin.apache.org/docs/role-managers
https://casbin.apache.org/docs/benchmark
웹 프레임워크용 Authz 미들웨어: https://casbin.apache.org/docs/middlewares
https://casbin.apache.org/docs/adopters
기여 가이드를 읽어 주세요.
이 프로젝트는 기여해 주신 모든 분들 덕분에 존재합니다.
이 프로젝트는 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다.
문제가 있거나 기능 요청이 있으면 연락해 주세요. PR은 언제나 환영합니다.
![]() | ![]() | ![]() | ![]() |
|---|
| Casbin | jCasbin | node-Casbin | PHP-Casbin |
| 프로덕션 사용 가능 | 프로덕션 사용 가능 | 프로덕션 사용 가능 | 프로덕션 사용 가능 |
![]() | ![]() | ![]() | ![]() |
|---|
| PyCasbin | Casbin.NET | Casbin-CPP | Casbin-RS |
| 프로덕션 사용 가능 | 프로덕션 사용 가능 | 프로덕션 사용 가능 | 프로덕션 사용 가능 |
| 모델 | 모델 파일 | 정책 파일 |
|---|