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

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)