작동 원리
Casbin의 접근 제어 모델은 PERM 메타 모델 (Policy, Effect, Request, Matchers) 형식으로 추상화되어 CONF 파일에 저장됩니다. 따라서 프로젝트의 권한 부여 메커니즘을 전환하거나 확장하기 위해서는 단지 Conf 설정 파일을 변경하는 것으로 가능합니다. 가용한 모델을 결합하여 여러분의 필요에 맞는 접근 제어 모델을 구성할 수 있습니다. 예를 들면 RBAC 역할과 ABAC 속성을 혼용하여 하나의 모델에서 사용 가능하며, 같은 정책 규칙(Policy Rule) 을 공유할 수 있습니다.
Casbin에서 가장 단순하고 기본적인 모델은 ACL(Access Control List) 입니다. ACL 모델의 CONF 파일은 이렇게 생겼습니다.
# Request 정의
[request_definition]
r = sub, obj, act
# Policy 정의
[policy_definition]
p = sub, obj, act
# Policy effect (허용/거부)
[policy_effect]
e = some(where (p.eft == allow))
# 조건식
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
다음은 ACL 모델의 정책(Policy) 예제입니다.
p, alice, data1, read
p, bob, data2, write
이것은 다음을 의미합니다.
- alice는 data1에 대해 read 할 수 있음
- bob은 data2에 대해 write 할 수 있음
각 줄의 끝에 '\'를 붙여서 여러 줄로 작성할 수 있습니다.
# 조건시
[matchers]
m = r.sub == p.sub && r.obj == p.obj \
&& r.act == p.act
ABAC를 사용할 때는 다음과 같이 조건식에 in
연산자를 사용할 수 있습니다. (현재 golang 에서만 사용할 수 있고 jCasbin과 Node-Casbin에서는 아직 지원하지 않습니다.)
# 조건식
[matchers]
m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')
배열을 사용할 때는 반드시 배열의 요소를 2개 이상 포함하세요. 그렇지 않으면 심각한 오류가 발생할 수 있습니다.
더 많은 연산자에 대해서 알아보려면 govaluate를 참조하세요.