본문으로 건너뛰기

작동 방식

Casbin에서는 접근 제어가 **PERM 메타 모델(Policy, Effect, Request, Matchers)**을 기반으로 한 CONF 파일로 표현됩니다. 프로젝트에서 인증 방식을 변경하는 것은 구성 파일을 편집하는 문제입니다. 컴포넌트를 조합하여 사용자 정의 모델을 만들 수 있습니다. 예를 들어, 단일 모델 및 정책 세트에서 RBAC 역할과 ABAC 속성을 결합할 수 있습니다.

PERM 모델은 Request, Policy, Effect, Matchers의 네 부분으로 구성됩니다. 이들은 함께 사용자가 리소스와 상호 작용하는 방식을 정의합니다.

Request​

요청 정의는 접근 요청의 매개변수를 지정합니다. 기본 요청은 세 가지 요소로 구성된 튜플입니다: subject (요청자), object (리소스), action (작업).

예시:

r = sub, obj, act

이 설정은 매칭 로직을 위한 매개변수 이름과 순서를 지정합니다.

Policy​

정책 정의는 접근 규칙의 형태를 설명합니다: 필드 이름과 순서.

예시:

p = sub, obj, act 또는 p = sub, obj, act, eft

정의에서 eft (정책 효과)가 생략되면 정책 파일의 effect 필드는 무시되며, 매칭된 정책은 "allow"(허용)으로 처리됩니다.

Matcher​

매처(matcher)는 요청을 정책과 어떻게 일치시키는지를 정의합니다.

예시: m = r.sub == p.sub && r.act == p.act && r.obj == p.obj

요청의 subject, object, action이 정책의 필드와 일치하면 해당 정책의 효과(p.eft)가 사용됩니다. 효과는 p.eft에 저장됩니다.

Effect​

effect 섹션은 모든 매칭된 정책의 효과를 논리적 표현식으로 결합합니다.

예시: e = some(where (p.eft == allow))

매칭된 정책 중 하나라도 효과가 "allow"(허용)이면 결과는 허용입니다.

다른 예시:

e = some(where (p.eft == allow)) && !some(where (p.eft == deny))

이는 다음과 같은 의미입니다: 최소한 하나의 정책이 허용하고 아무도 거부하지 않을 때만 결과가 허용됩니다. 허용과 거부가 모두 매칭되면 거부가 우선합니다.

ACL은 Casbin에서 가장 단순한 모델입니다. 다음은 최소한의 ACL 모델입니다:

# 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

이 모델의 정책 예시:

p, alice, data1, read
p, bob, data2, write

따라서:

  • alice는 data1을 읽을 수 있습니다.
  • bob은 data2에 쓸 수 있습니다.

각 줄 끝에 \를 붙여 매처를 여러 줄로 나눌 수 있습니다:

# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj \
&& r.act == p.act

in 연산자는 Go 구현체에서만 사용할 수 있습니다(jCasbin 또는 Node-Casbin에서는 아직 지원되지 않음):

# Matchers
[matchers]
m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')
주의

배열에는 두 개 이상의 요소가 있어야 합니다. 그렇지 않으면 Go 구현체에서 패닉(panic)이 발생할 수 있습니다.

더 많은 연산자에 대해서는 govaluate를 참조하세요.

Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.