주요 콘텐츠로 건너뛰기

Management API

Casbin 정책 관리에 대한 전체 지원을 제공하는 원시 API.

Filtered API

거의 모든 필터링된 api는 같은 매개변수를 가지고 있습니다 (fieldIndex int, fieldValues ...string). fieldIndex는 일치하는 시작 지점의 인덱스이며, fieldValues는 결과가 가져야 할 값들을 나타냅니다. fieldValues에서 빈 문자열은 어떤 단어든 될 수 있음을 주의하세요.

예시:

p, alice, book, read
p, bob, book, read
p, bob, book, write
p, alice, pen, get
p, bob, pen ,get
e.GetFilteredPolicy(1, "book") // will return: [[alice book read] [bob book read] [bob book write]]

e.GetFilteredPolicy(1, "book", "read") // will return: [[alice book read] [bob book read]]

e.GetFilteredPolicy(0, "alice", "", "read") // will return: [[alice book read]]

e.GetFilteredPolicy(0, "alice") // will return: [[alice book read] [alice pen get]]

참조

전역 변수 e는 Enforcer 인스턴스입니다.

e, err := NewEnforcer("examples/rbac_model.conf", "examples/rbac_policy.csv")

Enforce()

Enforce는 "주체"가 "객체"에 "동작"으로 접근할 수 있는지 결정합니다, 입력 매개변수는 보통: (sub, obj, act)입니다.

예를 들어:

ok, err := e.Enforce(request)

EnforceWithMatcher()

EnforceWithMatcher는 사용자 정의 매처를 사용하여 "주체"가 "객체"에 "동작"으로 접근할 수 있는지 결정합니다, 입력 매개변수는 보통: (matcher, sub, obj, act)이며, matcher가 ""일 때는 기본적으로 모델 매처를 사용합니다.

예를 들어:

ok, err := e.EnforceWithMatcher(matcher, request)

EnforceEx()

EnforceEx는 일치하는 규칙을 알려주어 집행을 설명합니다.

예를 들어:

ok, reason, err := e.EnforceEx(request)

EnforceExWithMatcher()

EnforceExWithMatcher는 사용자 정의 매처를 사용하고 일치하는 규칙을 알려주어 집행을 설명합니다.

예를 들어:

ok, reason, err := e.EnforceExWithMatcher(matcher, request)

BatchEnforce()

BatchEnforce는 각 요청을 집행하고 결과를 bool 배열로 반환합니다

예를 들어:

boolArray, err := e.BatchEnforce(requests)

GetAllSubjects()

GetAllSubjects는 현재 정책에서 나타나는 주체의 목록을 가져옵니다.

예를 들어:

allSubjects := e.GetAllSubjects()

GetAllNamedSubjects()

GetAllNamedSubjects는 현재 명명된 정책에서 나타나는 주체의 목록을 가져옵니다.

예를 들어:

allNamedSubjects := e.GetAllNamedSubjects("p")

GetAllObjects()

GetAllObjects는 현재 정책에서 나타나는 객체의 목록을 가져옵니다.

예를 들어:

allObjects := e.GetAllObjects()

GetAllNamedObjects()

GetAllNamedObjects는 현재 명명된 정책에서 나타나는 객체의 목록을 가져옵니다.

예를 들어:

allNamedObjects := e.GetAllNamedObjects("p")

GetAllActions()

GetAllActions는 현재 정책에서 나타나는 동작의 목록을 가져옵니다.

예를 들어:

allActions := e.GetAllActions()

GetAllNamedActions()

GetAllNamedActions는 현재 명명된 정책에서 나타나는 동작의 목록을 가져옵니다.

예를 들어:

allNamedActions := e.GetAllNamedActions("p")

GetAllRoles()

GetAllRoles는 현재 정책에 나타나는 역할 목록을 가져옵니다.

예를 들면:

allRoles = e.GetAllRoles()

GetAllNamedRoles()

GetAllNamedRoles는 현재 명명된 정책에 나타나는 역할 목록을 가져옵니다.

예를 들면:

allNamedRoles := e.GetAllNamedRoles("g")

GetPolicy()

GetPolicy는 정책의 모든 인증 규칙을 가져옵니다.

예를 들면:

policy = e.GetPolicy()

GetFilteredPolicy()

GetFilteredPolicy는 정책의 모든 인증 규칙을 가져옵니다. 필드 필터를 지정할 수 있습니다.

예를 들면:

filteredPolicy := e.GetFilteredPolicy(0, "alice")

GetNamedPolicy()

GetNamedPolicy는 명명된 정책의 모든 인증 규칙을 가져옵니다.

예를 들면:

namedPolicy := e.GetNamedPolicy("p")

GetFilteredNamedPolicy()

GetFilteredNamedPolicy는 명명된 정책의 모든 인증 규칙을 가져옵니다. 필드 필터를 지정할 수 있습니다.

예를 들면:

filteredNamedPolicy = e.GetFilteredNamedPolicy("p", 0, "bob")

GetGroupingPolicy()

GetGroupingPolicy는 정책의 모든 역할 상속 규칙을 가져옵니다.

예를 들면:

groupingPolicy := e.GetGroupingPolicy()

GetFilteredGroupingPolicy()

GetFilteredGroupingPolicy는 정책의 모든 역할 상속 규칙을 가져옵니다. 필드 필터를 지정할 수 있습니다.

예를 들면:

filteredGroupingPolicy := e.GetFilteredGroupingPolicy(0, "alice")

GetNamedGroupingPolicy()

GetNamedGroupingPolicy는 정책의 모든 역할 상속 규칙을 가져옵니다.

예를 들면:

namedGroupingPolicy := e.GetNamedGroupingPolicy("g")

GetFilteredNamedGroupingPolicy()

GetFilteredNamedGroupingPolicy는 정책의 모든 역할 상속 규칙을 가져옵니다.

예를 들면:

namedGroupingPolicy := e.GetFilteredNamedGroupingPolicy("g", 0, "alice")

HasPolicy()

HasPolicy는 인증 규칙이 존재하는지 여부를 결정합니다.

예를 들면:

hasPolicy := e.HasPolicy("data2_admin", "data2", "read")

HasNamedPolicy()

HasNamedPolicy는 명명된 인증 규칙이 존재하는지 여부를 결정합니다.

예를 들면:

hasNamedPolicy := e.HasNamedPolicy("p", "data2_admin", "data2", "read")

AddPolicy()

AddPolicy는 현재 정책에 인증 규칙을 추가합니다. 규칙이 이미 존재하면, 함수는 false를 반환하고 규칙은 추가되지 않습니다. 그렇지 않으면 함수는 새로운 규칙을 추가함으로써 true를 반환합니다.

예를 들면:

added := e.AddPolicy('eve', 'data3', 'read')

AddPolicies()

AddPolicies는 현재 정책에 인증 규칙을 추가합니다. 작업은 원자성을 가집니다. 따라서, 인증 규칙이 현재 정책과 일치하지 않는 규칙으로 구성된 경우, 함수는 false를 반환하고 현재 정책에 정책 규칙이 추가되지 않습니다. 모든 인증 규칙이 정책 규칙과 일치하는 경우, 함수는 true를 반환하고 각 정책 규칙이 현재 정책에 추가됩니다.

예를 들면:

rules := [][] string {
[]string {"jack", "data4", "read"},
[]string {"katy", "data4", "write"},
[]string {"leyo", "data4", "read"},
[]string {"ham", "data4", "write"},
}

areRulesAdded := e.AddPolicies(rules)

AddPoliciesEx()

AddPoliciesEx는 인증 규칙을 현재 정책에 추가합니다. 규칙이 이미 존재하는 경우, 규칙은 추가되지 않습니다. 하지만 AddPolicies와 달리, 다른 존재하지 않는 규칙들은 바로 false를 반환하는 대신 추가됩니다.

예를 들면:

ok, err := e.AddPoliciesEx([][]string{{"user1", "data1", "read"}, {"user2", "data2", "read"}})

AddNamedPolicy()

AddNamedPolicy는 인증 규칙을 현재 명명된 정책에 추가합니다. 규칙이 이미 존재하는 경우, 함수는 false를 반환하고 규칙은 추가되지 않습니다. 그렇지 않으면 함수는 새로운 규칙을 추가함으로써 true를 반환합니다.

예를 들면:

added := e.AddNamedPolicy("p", "eve", "data3", "read")

AddNamedPolicies()

AddNamedPolicies는 인증 규칙을 현재 명명된 정책에 추가합니다. 작업은 원자성을 가집니다. 따라서, 인증 규칙이 현재 정책과 일치하지 않는 규칙으로 구성된 경우, 함수는 false를 반환하고 현재 정책에 정책 규칙이 추가되지 않습니다. 모든 인증 규칙이 정책 규칙과 일치하는 경우, 함수는 true를 반환하고 각 정책 규칙이 현재 정책에 추가됩니다.

예를 들면:

rules := [][] string {
[]string {"jack", "data4", "read"},
[]string {"katy", "data4", "write"},
[]string {"leyo", "data4", "read"},
[]string {"ham", "data4", "write"},
}

areRulesAdded := e.AddNamedPolicies("p", rules)

AddNamedPoliciesEx()

AddNamedPoliciesEx는 인증 규칙을 현재 명명된 정책에 추가합니다. 규칙이 이미 존재하는 경우, 규칙은 추가되지 않습니다. 하지만 AddNamedPolicies와 달리, 다른 존재하지 않는 규칙들은 바로 false를 반환하는 대신 추가됩니다.

예를 들면:

ok, err := e.AddNamedPoliciesEx("p", [][]string{{"user1", "data1", "read"}, {"user2", "data2", "read"}})

SelfAddPoliciesEx()

SelfAddPoliciesEx는 autoNotifyWatcher가 비활성화된 상태에서 현재 명명된 정책에 인증 규칙을 추가합니다. 규칙이 이미 존재하는 경우, 규칙은 추가되지 않습니다. 하지만 SelfAddPolicies와 달리, 다른 존재하지 않는 규칙들은 바로 false를 반환하는 대신 추가됩니다.

예를 들면:

ok, err := e.SelfAddPoliciesEx("p", "p", [][]string{{"user1", "data1", "read"}, {"user2", "data2", "read"}})

RemovePolicy()

RemovePolicy는 현재 정책에서 인증 규칙을 제거합니다.

예를 들면:

removed := e.RemovePolicy("alice", "data1", "read")

RemovePolicies()

RemovePolicies는 현재 정책에서 인증 규칙을 제거합니다. 작업은 원자성을 가집니다. 따라서, 인증 규칙이 현재 정책과 일치하지 않는 규칙으로 구성된 경우, 함수는 false를 반환하고 현재 정책에서 정책 규칙이 제거되지 않습니다. 모든 인증 규칙이 정책 규칙과 일치하면 함수는 true를 반환하고 각 정책 규칙은 현재 정책에서 제거됩니다.

예를 들면:

rules := [][] string {
[]string {"jack", "data4", "read"},
[]string {"katy", "data4", "write"},
[]string {"leyo", "data4", "read"},
[]string {"ham", "data4", "write"},
}

areRulesRemoved := e.RemovePolicies(rules)

RemoveFilteredPolicy()

RemoveFilteredPolicy는 현재 정책에서 인증 규칙을 제거하며, 필드 필터를 지정할 수 있습니다. RemovePolicy는 현재 정책에서 인증 규칙을 제거합니다.

예를 들면:

removed := e.RemoveFilteredPolicy(0, "alice", "data1", "read")

RemoveNamedPolicy()

RemoveNamedPolicy는 현재 명명된 정책에서 인증 규칙을 제거합니다.

예를 들면:

removed := e.RemoveNamedPolicy("p", "alice", "data1", "read")

RemoveNamedPolicies()

RemoveNamedPolicies는 현재 명명된 정책에서 인증 규칙을 제거합니다. 이 작업은 원자성을 가지고 있습니다. 따라서, 인증 규칙이 현재 정책과 일치하지 않는 규칙으로 구성되어 있다면, 함수는 false를 반환하고 현재 정책에서 어떤 정책 규칙도 제거되지 않습니다. 모든 인증 규칙이 정책 규칙과 일치하면 함수는 true를 반환하고 각 정책 규칙은 현재 정책에서 제거됩니다.

예를 들면:

rules := [][] string {
[]string {"jack", "data4", "read"},
[]string {"katy", "data4", "write"},
[]string {"leyo", "data4", "read"},
[]string {"ham", "data4", "write"},
}

areRulesRemoved := e.RemoveNamedPolicies("p", rules)

RemoveFilteredNamedPolicy()

RemoveFilteredNamedPolicy는 현재 명명된 정책에서 인증 규칙을 제거하며, 필드 필터를 지정할 수 있습니다.

예를 들면:

removed := e.RemoveFilteredNamedPolicy("p", 0, "alice", "data1", "read")

HasGroupingPolicy()

HasGroupingPolicy는 역할 상속 규칙이 존재하는지 여부를 결정합니다.

예를 들면:

has := e.HasGroupingPolicy("alice", "data2_admin")

HasNamedGroupingPolicy()

HasNamedGroupingPolicy는 명명된 역할 상속 규칙이 존재하는지 여부를 결정합니다.

예를 들면:

has := e.HasNamedGroupingPolicy("g", "alice", "data2_admin")

AddGroupingPolicy()

AddGroupingPolicy는 역할 상속 규칙을 현재 정책에 추가합니다. 규칙이 이미 존재하면, 함수는 false를 반환하고 규칙은 추가되지 않습니다. 그렇지 않으면 함수는 새로운 규칙을 추가함으로써 true를 반환합니다.

예를 들면:

added := e.AddGroupingPolicy("group1", "data2_admin")

AddGroupingPolicies()

AddGroupingPolicies는 역할 상속 규칙을 현재 정책에 추가합니다. 이 작업은 원자성을 가지고 있습니다. 따라서, 인증 규칙이 현재 정책과 일치하지 않는 규칙으로 구성되어 있다면, 함수는 false를 반환하고 현재 정책에 어떤 정책 규칙도 추가되지 않습니다. 모든 인증 규칙이 정책 규칙과 일치하면 함수는 true를 반환하고 각 정책 규칙은 현재 정책에 추가됩니다.

예를 들면:

rules := [][] string {
[]string {"ham", "data4_admin"},
[]string {"jack", "data5_admin"},
}

areRulesAdded := e.AddGroupingPolicies(rules)

AddGroupingPoliciesEx()

AddGroupingPoliciesEx는 역할 상속 규칙을 현재 정책에 추가합니다. 규칙이 이미 존재하면, 규칙은 추가되지 않습니다. 하지만 AddGroupingPolicies와 달리, 다른 존재하지 않는 규칙들은 false를 직접 반환하는 대신 추가됩니다.

예를 들어:

ok, err := e.AddGroupingPoliciesEx([][]string{{"user1", "member"}, {"user2", "member"}})

AddNamedGroupingPolicy()

AddNamedGroupingPolicy는 현재 정책에 명명된 역할 상속 규칙을 추가합니다. 규칙이 이미 존재하면, 함수는 false를 반환하고 규칙은 추가되지 않습니다. 그렇지 않으면 함수는 새로운 규칙을 추가함으로써 true를 반환합니다.

예를 들어:

added := e.AddNamedGroupingPolicy("g", "group1", "data2_admin")

AddNamedGroupingPolicies()

AddNamedGroupingPolicies는 현재 정책에 명명된 역할 상속 규칙을 추가합니다. 작업은 원자성을 가집니다. 따라서, 인증 규칙이 현재 정책과 일치하지 않는 규칙으로 구성되어 있다면, 함수는 false를 반환하고 어떠한 정책 규칙도 현재 정책에 추가되지 않습니다. 모든 인증 규칙이 정책 규칙과 일치하면, 함수는 true를 반환하고 각 정책 규칙이 현재 정책에 추가됩니다.

예를 들어:

rules := [][] string {
[]string {"ham", "data4_admin"},
[]string {"jack", "data5_admin"},
}

areRulesAdded := e.AddNamedGroupingPolicies("g", rules)

AddNamedGroupingPoliciesEx()

AddNamedGroupingPoliciesEx는 현재 정책에 명명된 역할 상속 규칙을 추가합니다. 규칙이 이미 존재하면, 규칙은 추가되지 않습니다. 하지만 AddNamedGroupingPolicies와 달리, 존재하지 않는 다른 규칙들은 false를 직접 반환하는 대신 추가됩니다

예를 들어:

ok, err := e.AddNamedGroupingPoliciesEx("g", [][]string{{"user1", "member"}, {"user2", "member"}})

RemoveGroupingPolicy()

RemoveGroupingPolicy는 현재 정책에서 역할 상속 규칙을 제거합니다.

예를 들어:

removed := e.RemoveGroupingPolicy("alice", "data2_admin")

RemoveGroupingPolicies()

RemoveGroupingPolicies는 현재 정책에서 역할 상속 규칙을 제거합니다. 작업은 원자성을 가집니다. 따라서, 인증 규칙이 현재 정책과 일치하지 않는 규칙으로 구성되어 있다면, 함수는 false를 반환하고 어떠한 정책 규칙도 현재 정책에서 제거되지 않습니다. 모든 인증 규칙이 정책 규칙과 일치하면, 함수는 true를 반환하고 각 정책 규칙이 현재 정책에서 제거됩니다.

예를 들어:

rules := [][] string {
[]string {"ham", "data4_admin"},
[]string {"jack", "data5_admin"},
}

areRulesRemoved := e.RemoveGroupingPolicies(rules)

RemoveFilteredGroupingPolicy()

RemoveFilteredGroupingPolicy는 현재 정책에서 역할 상속 규칙을 제거하며, 필드 필터를 지정할 수 있습니다.

예를 들어:

removed := e.RemoveFilteredGroupingPolicy(0, "alice")

RemoveNamedGroupingPolicy()

RemoveNamedGroupingPolicy는 현재 명명된 정책에서 역할 상속 규칙을 제거합니다.

예를 들어:

removed := e.RemoveNamedGroupingPolicy("g", "alice")

RemoveNamedGroupingPolicies()

RemoveNamedGroupingPolicies는 현재 정책에서 명명된 역할 상속 규칙을 제거합니다. 작업은 원자성을 가집니다. 따라서, 인증 규칙이 현재 정책과 일치하지 않는 규칙으로 구성되어 있다면, 함수는 false를 반환하고 어떠한 정책 규칙도 현재 정책에서 제거되지 않습니다. 모든 인증 규칙이 정책 규칙과 일치하면, 함수는 true를 반환하고 각 정책 규칙이 현재 정책에서 제거됩니다.

예를 들어:

rules := [][] string {
[]string {"ham", "data4_admin"},
[]string {"jack", "data5_admin"},
}

areRulesRemoved := e.RemoveNamedGroupingPolicies("g", rules)

RemoveFilteredNamedGroupingPolicy()

RemoveFilteredNamedGroupingPolicy는 현재 명명된 정책에서 역할 상속 규칙을 제거하며, 필드 필터를 지정할 수 있습니다.

예를 들면:

removed := e.RemoveFilteredNamedGroupingPolicy("g", 0, "alice")

UpdatePolicy()

UpdatePolicy는 이전 정책을 새로운 정책으로 업데이트합니다.

예를 들면:

updated, err := e.UpdatePolicy([]string{"eve", "data3", "read"}, []string{"eve", "data3", "write"})

UpdatePolicies()

UpdatePolicies는 모든 이전 정책들을 새로운 정책들로 업데이트합니다.

예를 들면:

updated, err := e.UpdatePolicies([][]string{{"eve", "data3", "read"}, {"jack", "data3", "read"}}, [][]string{{"eve", "data3", "write"}, {"jack", "data3", "write"}})

AddFunction()

AddFunction은 사용자 정의 함수를 추가합니다.

예를 들면:

func CustomFunction(key1 string, key2 string) bool {
if key1 == "/alice_data2/myid/using/res_id" && key2 == "/alice_data/:resource" {
return true
} else if key1 == "/alice_data2/myid/using/res_id" && key2 == "/alice_data2/:id/using/:resId" {
return true
} else {
return false
}
}

func CustomFunctionWrapper(args ...interface{}) (interface{}, error) {
key1 := args[0].(string)
key2 := args[1].(string)

return bool(CustomFunction(key1, key2)), nil
}

e.AddFunction("keyMatchCustom", CustomFunctionWrapper)

LoadFilteredPolicy()

LoadFilteredPolicy는 파일/데이터베이스에서 필터링된 정책들을 로드합니다.

예를 들면:

err := e.LoadFilteredPolicy()

LoadIncrementalFilteredPolicy()

LoadIncrementalFilteredPolicy는 파일/데이터베이스에서 필터링된 정책을 추가합니다.

예를 들면:

err := e.LoadIncrementalFilteredPolicy()

UpdateGroupingPolicy()

UpdateGroupingPolicy는 g 섹션에서 oldRule을 newRule로 업데이트합니다.

예를 들면:

succeed, err : = e.UpdateGroupingPolicy([]string{"data3_admin", "data4_admin"}, []string{"admin", "data4_admin"})

UpdateNamedGroupingPolicy()

UpdateNamedGroupingPolicy는 g 섹션에서 oldRule 명칭인 ptype을 newRule로 업데이트합니다.

예를 들면:

succeed, err : = e.UpdateGroupingPolicy("g1",[]string{"data3_admin", "data4_admin"}, []string{"admin", "data4_admin"})

SetFieldIndex()

sub, obj, domainpriority의 관례적인 이름과 위치의 사용자 정의를 지원하는 SetFieldIndex.

[policy_definition]
p = customized_priority, obj, act, eft, subject

예를 들면:

e.SetFieldIndex("p", constant.PriorityIndex, 0)
e.SetFieldIndex("p", constant.SubjectIndex, 4)