メインコンテンツにスキップ

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は、「subject」が「object」に対して「action」操作を行うことができるかどうかを決定します。入力パラメータは通常:(sub, obj, act)です。

例えば:

ok, err := e.Enforce(request)

EnforceWithMatcher()

EnforceWithMatcherはカスタムマッチャーを使用して、「subject」が「object」に対して「action」操作を行うことができるかどうかを決定します。入力パラメータは通常:(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は、現在のポリシーに表示されるsubjectのリストを取得します。

例えば:

allSubjects := e.GetAllSubjects()

GetAllNamedSubjects()

GetAllNamedSubjectsは、現在の名前付きポリシーに表示されるsubjectのリストを取得します。

例えば:

allNamedSubjects := e.GetAllNamedSubjects("p")

GetAllObjects()

GetAllObjectsは、現在のポリシーに表示されるobjectのリストを取得します。

例えば:

allObjects := e.GetAllObjects()

GetAllNamedObjects()

GetAllNamedObjectsは、現在の名前付きポリシーに表示されるobjectのリストを取得します。

例えば:

allNamedObjects := e.GetAllNamedObjects("p")

GetAllActions()

GetAllActionsは、現在のポリシーに表示されるactionのリストを取得します。

例えば:

allActions := e.GetAllActions()

GetAllNamedActions()

GetAllNamedActionsは、現在の名前付きポリシーに表示されるactionのリストを取得します。

例えば:

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()

SetFieldIndexは、subobjdomainpriorityの従来の名前と位置のカスタマイズをサポートします。

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

例:

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