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

**Management API**

Management API охватывает все операции с политиками и группировками (ролями): получение, добавление, удаление, обновление, фильтрация. Ниже e — это экземпляр Enforcer.

Filtered 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") // returns: [["alice", "book", "read"], ["bob", "book", "read"], ["bob", "book", "write"]]

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

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

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

Справочник по API​

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

Enforce()​

Enforce decides whether a "subject" can access a "object" with the operation "action", input parameters are usually: (sub, obj, act).

Например:

ok, err := e.Enforce(request)

EnforceWithMatcher()​

EnforceWithMatcher использует пользовательский matcher для определения того, может ли «субъект» получить доступ к «объекту» с операцией «действие». Входные параметры обычно имеют вид: (matcher, sub, obj, act). Если значение matcher равно "", используется matcher из модели по умолчанию.

Например:

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

EnforceEx()​

EnforceEx объясняет результат проверки авторизации, выводя совпавшие правила.

Например:

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

EnforceExWithMatcher()​

EnforceExWithMatcher использует пользовательский matcher и объясняет результат проверки авторизации, выводя совпавшие правила.

Например:

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

BatchEnforce()​

BatchEnforce выполняет проверку для каждого запроса и возвращает результаты в виде массива булевых значений.

Например:

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 adds a named role inheritance rule to the current policy. If the rule already exists, the function returns false and the rule will not be added. Otherwise the function returns true by adding the new rule.

Например:

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

AddNamedGroupingPolicies()​

AddNamedGroupingPolicies adds named role inheritance rules to the current policy. The operation is atomic in nature. Hence, if authorization rules consists of rules which are not consistent with the current policy, the function returns false and no policy rule is added to the current policy. If all the authorization rules are consistent with the policy rules, the function returns true and each policy rule is added to the current policy.

Например:

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

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

AddNamedGroupingPoliciesEx()​

AddNamedGroupingPoliciesEx adds named role inheritance rules to the current policy. If the rule already exists, the rule will not be added. But unlike AddNamedGroupingPolicies, other non-existent rules are added instead of returning false directly

Например:

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

RemoveGroupingPolicy()​

RemoveGroupingPolicy removes a role inheritance rule from the current policy.

Например:

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

RemoveGroupingPolicies()​

RemoveGroupingPolicies removes role inheritance rules from the current policy. The operation is atomic in nature. Hence, if authorization rules consists of rules which are not consistent with the current policy, the function returns false and no policy rule is removed from the current policy. If all the authorization rules are consistent with the policy rules, the function returns true and each policy rule is removed from the current policy.

Например:

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

areRulesRemoved := e.RemoveGroupingPolicies(rules)

RemoveFilteredGroupingPolicy()​

RemoveFilteredGroupingPolicy removes a role inheritance rule from the current policy, field filters can be specified.

Например:

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

RemoveNamedGroupingPolicy()​

RemoveNamedGroupingPolicy removes a role inheritance rule from the current named policy.

Например:

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

RemoveNamedGroupingPolicies()​

RemoveNamedGroupingPolicies removes named role inheritance rules from the current policy. The operation is atomic in nature. Hence, if authorization rules consists of rules which are not consistent with the current policy, the function returns false and no policy rule is removed from the current policy. If all the authorization rules are consistent with the policy rules, the function returns true and each policy rule is removed from the current policy.

Например:

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

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

RemoveFilteredNamedGroupingPolicy()​

RemoveFilteredNamedGroupingPolicy removes a role inheritance rule from the current named policy, field filters can be specified.

Например:

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

UpdatePolicy()​

UpdatePolicy update a old policy to new policy.

Например:

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

UpdatePolicies()​

UpdatePolicies updates all old policies to new policies.

Например:

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

UpdateNamedPolicy()​

UpdateNamedPolicy update a old policy to new policy in the named policy.

Например:

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

UpdateNamedPolicies()​

UpdateNamedPolicies updates all old policies to new policies in the named policy.

Например:

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

UpdateFilteredPolicies()​

UpdateFilteredPolicies updates all old policies that match the filter to new policies.

Например:

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

AddFunction()​

AddFunction adds a customized function.

Например:

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 loads filtered policies from file/database.

Например:

err := e.LoadFilteredPolicy()

LoadIncrementalFilteredPolicy()​

LoadIncrementalFilteredPolicy append a filtered policy from file/database.

Например:

err := e.LoadIncrementalFilteredPolicy()

UpdateGroupingPolicy()​

UpdateGroupingPolicy updates oldRule to newRulein g section

Например:

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

UpdateNamedGroupingPolicy()​

UpdateNamedGroupingPolicy updates oldRule named ptype to newRulein g section

Например:

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

SetFieldIndex()​

SetFieldIndex suport customization of conventional name and position of sub, obj, domain and priority.

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

Например:

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

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