개요(Overview)
Casbin은 강력하고 효율적인 오픈소스 접근 제어 라이브러리입니다. 다양한 접근 제어 모델에 기반한 권한 부여를 지원합니다.
Casbin이 지원하는 언어
Casbin | jCasbin | node-Casbin | PHP-Casbin |
실무 개발 적합(Production-Ready) | 실무 개발 적합(Production-Ready) | 실무 개발 적합(Production-Ready) | 실무 개발 적합(Production-Ready) |
PyCasbin | Casbin.NET | Casbin-CPP | Casbin-RS |
실무 개발 적합(Production-Ready) | 실무 개발 적합(Production-Ready) | production-ready | production-ready |
언어별 기능 지원 현황
Feature | Go | Java | Node.js | PHP | Python | C# | Delphi | Rust | C++ | Lua | Dart | Elixir |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Enforcement | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
RBAC | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
ABAC | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Scaling ABAC (eval() ) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
Adapter | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
Management API | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
RBAC API | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Batch API | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ |
Filtered Adapter | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ |
Watcher | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
Role Manager | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ |
Multi-Threading | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
'in' of matcher | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
Casbin이 모든 언어에서 같은 기능을 지원하도록 최선을 다하고 있습니다. 그러나 아직은 완벽하지 않습니다. 현재 진행 상황은 위의 표와 같습니다. ✅ Watcher와 Role Manager는 core 라이브러리에서 인터페이스로만 존재합니다. Watcher와 Role Manager의 구현 여부는 아직 결정하지 못했습니다.
Casbin이란?
Casbin이 하는 것:
- 전통적인
{보안 주체, 대상, 행위}
형식이나 여러분이 별도로 정의한 형식에 따라 보안 정책을 실시합니다. 권한 허용과 거부를 모두 지원합니다. - 접근 제어 모델과 보안 정책을 저장합니다.
- 사용자-역할 간 맵핑 및 역할-역할 간 맵핑(역할-기반 접근 제어에서의 역할 계층)을 관리합니다.
- support built-in superuser like
root
oradministrator
. A superuser can do anything without explicit permissions. - 규칙 검사를 위한 다양한 빌트인 연산자를 제공합니다. 예를 들어,
keyMatch
는 리소스 키/foo/bar
를 패턴/foo*
에 매칭합니다.
Casbin이 하지 않는 것:
- 인증 (로그인 시
username
과password
를 검증하는 것) - 사용자와 역할 목록 관리. 해당 프로젝트에서 이들을 직접 관리하는 것이 더 편할 것이라고 생각합니다. 사용자 정보에는 패스워드가 있는데, Casbin은 패스워드 저장소로는 설계되지 않았습니다. 다만, Casbin은 역할-기반 접근 제어 시나리오에서 사용될 사용자와 역할 간의 연결을 저장합니다.