
CASBIN4D는 인기있는 승인 라이브러리 Casbin의 Delphi/Pascal에 대한 크로스 플랫폼 (Firemonkey) 구현입니다. 다양한 액세스 제어 모델을 기반으로 승인 시행을 지원합니다.
이 라이브러리를 공유, 포크, 검토 및 개선하도록 진심으로 초대됩니다. 자유롭게 의견을 제시하고 제안을 제공하십시오. 기여하려면 먼저 개발자의 Wiki 페이지를 확인하십시오.
| 카스빈 | Jcasbin | 노드 카스 빈 | PHP-CASBIN |
| 생산 준비 | 생산 준비 | 생산 준비 | 생산 준비 |
![]() | |||
|---|---|---|---|
| Pycasbin | casbin4d | Casbin-Net | Casbin-Rs |
| 생산 준비 | 실험 | 생산 준비 | 생산 준비 |
write-article read-log 특정 기사 나 로그에 대한 액세스를 제어하지 않습니다.resource.Owner 리소스의 속성을 얻는 데 사용될 수 있습니다./res/* , /res/:id 및 http 메소드와 같은 경로를 지원합니다. GET , POST , PUT , DELETE .Casbin에서는 액세스 제어 모델이 Perm Metamodel (정책, 효과, 요청, 매칭)을 기반으로 CONC 파일로 추상화됩니다. 따라서 프로젝트의 인증 메커니즘을 전환하거나 업그레이드하는 것은 구성을 수정하는 것만 큼 간단합니다. 사용 가능한 모델을 결합하여 고유 한 액세스 제어 모델을 사용자 정의 할 수 있습니다. 예를 들어, 하나의 모델 내에서 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
위 구성은 GO 언어를 따릅니다.
Casbin4d는 이해하지만 일반적인 델파이/파스칼 스타일도 사용할 수 있습니다.
...
[matchers]
m = r.sub = p.sub and r.obj = p.sub and r.act = p.act
ACL 모델의 예제 정책은 다음과 같습니다.
p, alice, data1, read
p, bob, data2, write
Casbin의 경우 이것은 다음을 의미합니다.
그런 다음 응용 프로그램에서 새 Casbin (인터페이스) 객체를 인스턴스화하고 필요한 파일을 전달합니다.
var
casbin: ICasbin;
begin
casbin:=TCasbin.Create ('model.conf', 'policies.csv');
...
end
그리고 마지막으로, 테스트 (시행) 주장 :
...
if casbin.enforce(['alice,data1,read']) then
// Alice is super happy as she can read data1
else
// Alice is sad
...
Casbin이하는 일 :
{subject, object, action} 지원됩니다.root 또는 administrator 와 같은 내장 슈퍼 사용자를 지원합니다. 슈퍼업자는 명시된 권한없이 무엇이든 할 수 있습니다.keyMatch 리소스 키 /foo/bar Pattern /foo* 에 매핑 할 수 있습니다.Casbin이하지 않는 것 :
username 및 password 확인)CASBIN4D는 패키지 (현재 Delphi 10.3 RIO 용)로 제공되며 IDE에 설치할 수 있습니다. 그러나 시각적 구성 요소가 없으므로 패키지와 독립적으로 장치를 사용할 수 있습니다. 프로젝트에서 단위를 가져 오기 만하면 (그 수를 신경 쓰지 않는다고 가정)
위키 페이지를 참조하십시오
온라인 편집기 (http://casbin.org/editor/)를 사용하여 웹 브라우저에 Casbin 모델과 정책을 작성할 수도 있습니다. 프로그래밍 언어의 IDE와 마찬가지로 syntax highlighting 및 code completion 와 같은 기능을 제공합니다.
메인 데모를 사용하여 스크립트와 어설 션을 테스트 할 수도 있습니다. 데모를 참조하십시오
데모 폴더를 참조하십시오. 예제 폴더에는 원래 GO 구현의 예제 구성 및 정책 파일이 포함되어 있습니다.
메인 데모는 데모/메인 폴더 아래에 있습니다. 또한이 폴더에서 실행 파일을 찾아서 다운로드하고 casbin4d를 시도 할 수 있습니다.

문서를 참조하십시오
CASBIN4D는 iPolicyManager를 통해 권한을 관리하기위한 한 가지 액세스 지점을 제공합니다. 다른 구현에 익숙하다면 두 세트의 API (Management API 및 RBAC API)가 있음을 알 수 있습니다. 이 구현은 정책 관리자에 따라 두 가지를 결합합니다.
CASBIN4D에서 정책 저장소는 어댑터의 개념을 통해 추상화됩니다. CASBIN4D의 소비자는 자신의 요구에 맞는 정책 저장 관리를 자유롭게 구현할 수 있습니다. 편의를 위해 Casbin4D는 텍스트 파일 용으로 하나의 어댑터와 하나의 메모리 어댑터를 제공합니다. 당신은 더 넓은 사용으로 새로운 어댑터를 기여할 것을 환영합니다 (그리고 초대). 알려주세요
CASBIN4D는 멀티 스레딩을 염두에두고 설계되었습니다. 현재 구현은이를 집행자 수준에서 달성합니다
벤치 마크 폴더에는 정책 집행을 테스트하는 벤치 마크 프로젝트가 있습니다.
프로젝트는 다음 기계/설치로 실행되었습니다.
* Dell XPS 15 9560: Intel(R) Core(TM) i7-7700HQ CPU @2.80GHz, 2801MHz, 4 Core(s), 8 Logical Processor(s)
* Windows: Windows 10 Pro 64-bit, 10.0.16299 Build 16299
결과는 다음 표에 나와 있습니다. 시간 오버 헤드는 작업 (OP) 당 계산되며, 이는 TCasbin.enforce[..]
| 테스트 케이스 | 크기 | 시간 간접비 | 메모리 오버 헤드 |
|---|---|---|---|
| 원시 집행 | 2 개의 규칙 (2 명의 사용자) | 0.000090 초/op | 0 KB |
| 기본 모델 | 2 개의 규칙 (2 명의 사용자) | 0.000466 초/op | 432 b |
| RBAC | 5 규칙 (2 명의 사용자, 1 역할) | 0.000872 초/op | 352 b |
| RBAC (작은) | 1,100 규칙 (1,000 명의 사용자, 100 역할) | 0.238945 초/op | 1.49MB |
| RBAC (중간) | 11,000 규칙 (10,000 명의 사용자, 1,000 개 역할) | 9.745707 SEC/OP | 15.7 MB |
| RBAC (리소스 역할 포함) | 6 개의 규칙 (2 명의 사용자, 2 역할) | 0.000658 초/op | 352 b |
| RBAC (도메인/임차인 포함) | 6 개의 규칙 (2 명의 사용자, 1 개의 역할, 2 개의 도메인) | 0.000670 초/op | 352 b |
| RBAC (거부) | 6 개의 규칙 (2 명의 사용자, 1 역할) | 0.001260 초/op | 380 b |
| ABAC | 0 규칙 (0 사용자) | 0.000181 초/op | 120 b |
| keymatch | 2 개의 규칙 (2 명의 사용자) | 0.000782 초/op | 352 b |
| 우선 사항 | 9 규칙 (2 명의 사용자, 2 역할) | 0.001124 SEC/OP | 380 b |
| 모델 | 모델 파일 | 정책 파일 |
|---|---|---|
| ACL | Basic_Model.conf | Basic_policy.csv |
| 슈퍼 유저가있는 ACL | BASIC_MODEL_WITH_ROOT.CONF | Basic_policy.csv |
| 사용자없이 ACL | Basic_model_without_users.conf | Basic_policy_without_users.csv |
| 리소스가없는 ACL | BASIC_MODEL_WITHOUT_RESOURCES.conf | Basic_policy_without_resources.csv |
| RBAC | rbac_model.conf | rbac_policy.csv |
| 리소스 역할을 가진 RBAC | rbac_model_with_resource_roles.conf | rbac_policy_with_resource_roles.csv |
| 도메인/임차인이있는 RBAC | rbac_model_with_domains.conf | rbac_policy_with_domains.csv |
| ABAC | abac_model.conf | N/A |
| 평안한 | keymatch_model.conf | keymatch_policy.csv |
| 거부 | rbac_model_with_deny.conf | rbac_policy_with_deny.csv |
| 우선 사항 | Priority_Model.conf | Priority_policy.csv |
GO에서 원래 구현의 대부분의 테스트는 델파이에서 수입되었습니다. 테스트를 참조하십시오
최신 상태에 대해서는 여기에서 코드 적용 범위를 확인할 수 있습니다. 테스트와 적용 범위를 향상시킬 수 있습니다.
이 프로젝트는 Apache 2.0 라이센스에 따라 라이센스가 부여됩니다.
문제 나 기능 요청이 있으면 당사에 문의하십시오. PR을 환영합니다