Перейти до основного контенту

Management API

Примітивний API, який забезпечує повну підтримку управління політикою Casbin.

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), використовує матчер моделі за замовчуванням, коли матчер є "".

Наприклад:

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 оновлює oldRule на newRule в секції g

Наприклад:

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

UpdateNamedGroupingPolicy()

UpdateNamedGroupingPolicy оновлює oldRule з іменем ptype на newRule в секції g

Наприклад:

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

SetFieldIndex()

SetFieldIndex підтримує налаштування звичайного імені та позиції sub, obj, domain та priority.

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

Наприклад:

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