Ir al contenido principal

Management API

La API primitiva que proporciona soporte completo para la gestión de políticas de Casbin.

Filtered API

Casi todas las api filtradas tienen los mismos parámetros (fieldIndex int, fieldValues ...string). fieldIndex es el índice donde comienza la coincidencia, fieldValues denota los valores que el resultado debe tener. Tenga en cuenta que la cadena vacía en fieldValues podría ser cualquier palabra.

Ejemplo:

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]]

Referencia

La variable global e es una instancia de Enforcer.

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

Enforce()

Enforce decide si un "sujeto" puede acceder a un "objeto" con la operación "acción", los parámetros de entrada suelen ser: (sub, obj, act).

Por ejemplo:

ok, err := e.Enforce(request)

EnforceWithMatcher()

EnforceWithMatcher utiliza un comparador personalizado para decidir si un "sujeto" puede acceder a un "objeto" con la operación "acción", los parámetros de entrada suelen ser: (matcher, sub, obj, act), se usa el comparador del modelo por defecto cuando matcher es "".

Por ejemplo:

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

EnforceEx()

EnforceEx explica la aplicación informando sobre las reglas coincidentes.

Por ejemplo:

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

EnforceExWithMatcher()

EnforceExWithMatcher utiliza un comparador personalizado y explica la aplicación informando sobre las reglas coincidentes.

Por ejemplo:

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

BatchEnforce()

BatchEnforce aplica cada solicitud y devuelve el resultado en un array de booleanos

Por ejemplo:

boolArray, err := e.BatchEnforce(requests)

GetAllSubjects()

GetAllSubjects obtiene la lista de sujetos que aparecen en la política actual.

Por ejemplo:

allSubjects := e.GetAllSubjects()

GetAllNamedSubjects()

GetAllNamedSubjects obtiene la lista de sujetos que aparecen en la política nombrada actual.

Por ejemplo:

allNamedSubjects := e.GetAllNamedSubjects("p")

GetAllObjects()

GetAllObjects obtiene la lista de objetos que aparecen en la política actual.

Por ejemplo:

allObjects := e.GetAllObjects()

GetAllNamedObjects()

GetAllNamedObjects obtiene la lista de objetos que aparecen en la política nombrada actual.

Por ejemplo:

allNamedObjects := e.GetAllNamedObjects("p")

GetAllActions()

GetAllActions obtiene la lista de acciones que aparecen en la política actual.

Por ejemplo:

allActions := e.GetAllActions()

GetAllNamedActions()

GetAllNamedActions obtiene la lista de acciones que aparecen en la política nombrada actual.

Por ejemplo:

allNamedActions := e.GetAllNamedActions("p")

GetAllRoles()

GetAllRoles obtiene la lista de roles que aparecen en la política actual.

Por ejemplo:

allRoles = e.GetAllRoles()

GetAllNamedRoles()

GetAllNamedRoles obtiene la lista de roles que aparecen en la política nombrada actual.

Por ejemplo:

allNamedRoles := e.GetAllNamedRoles("g")

GetPolicy()

GetPolicy obtiene todas las reglas de autorización en la política.

Por ejemplo:

policy = e.GetPolicy()

GetFilteredPolicy()

GetFilteredPolicy obtiene todas las reglas de autorización en la política, se pueden especificar filtros de campo.

Por ejemplo:

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

GetNamedPolicy()

GetNamedPolicy obtiene todas las reglas de autorización en la política nombrada.

Por ejemplo:

namedPolicy := e.GetNamedPolicy("p")

GetFilteredNamedPolicy()

GetFilteredNamedPolicy obtiene todas las reglas de autorización en la política nombrada, se pueden especificar filtros de campo.

Por ejemplo:

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

GetGroupingPolicy()

GetGroupingPolicy obtiene todas las reglas de herencia de roles en la política.

Por ejemplo:

groupingPolicy := e.GetGroupingPolicy()

GetFilteredGroupingPolicy()

GetFilteredGroupingPolicy obtiene todas las reglas de herencia de roles en la política, se pueden especificar filtros de campo.

Por ejemplo:

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

GetNamedGroupingPolicy()

GetNamedGroupingPolicy obtiene todas las reglas de herencia de roles en la política nombrada.

Por ejemplo:

namedGroupingPolicy := e.GetNamedGroupingPolicy("g")

GetFilteredNamedGroupingPolicy()

GetFilteredNamedGroupingPolicy obtiene todas las reglas de herencia de roles en la política nombrada.

Por ejemplo:

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

HasPolicy()

HasPolicy determina si existe una regla de autorización.

Por ejemplo:

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

HasNamedPolicy()

HasNamedPolicy determina si existe una regla de autorización con nombre.

Por ejemplo:

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

AddPolicy()

AddPolicy añade una regla de autorización a la política actual. Si la regla ya existe, la función devuelve falso y la regla no será añadida. De lo contrario, la función devuelve verdadero al añadir la nueva regla.

Por ejemplo:

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

AddPolicies()

AddPolicies añade reglas de autorización a la política actual. La operación es de naturaleza atómica. Por lo tanto, si las reglas de autorización consisten en reglas que no son consistentes con la política actual, la función devuelve falso y ninguna regla de política se añade a la política actual. Si todas las reglas de autorización son consistentes con las reglas de política, la función devuelve verdadero y cada regla de política se añade a la política actual.

Por ejemplo:

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

areRulesAdded := e.AddPolicies(rules)

AddPoliciesEx()

AddPoliciesEx añade reglas de autorización a la política actual. Si la regla ya existe, la regla no será añadida. Pero a diferencia de AddPolicies, otras reglas no existentes se añaden en lugar de devolver falso directamente

Por ejemplo:

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

AddNamedPolicy()

AddNamedPolicy añade una regla de autorización a la política con nombre actual. Si la regla ya existe, la función devuelve falso y la regla no será añadida. De lo contrario, la función devuelve verdadero al añadir la nueva regla.

Por ejemplo:

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

AddNamedPolicies()

AddNamedPolicies añade reglas de autorización a la política con nombre actual. La operación es de naturaleza atómica. Por lo tanto, si las reglas de autorización consisten en reglas que no son consistentes con la política actual, la función devuelve falso y ninguna regla de política se añade a la política actual. Si todas las reglas de autorización son consistentes con las reglas de política, la función devuelve verdadero y cada regla de política se añade a la política actual.

Por ejemplo:

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 añade reglas de autorización a la política con nombre actual. Si la regla ya existe, la regla no será añadida. Pero a diferencia de AddNamedPolicies, otras reglas no existentes se añaden en lugar de devolver falso directamente

Por ejemplo:

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

SelfAddPoliciesEx()

SelfAddPoliciesEx añade reglas de autorización a la política con nombre actual con autoNotifyWatcher desactivado. Si la regla ya existe, la regla no será añadida. Pero a diferencia de SelfAddPolicies, otras reglas no existentes se añaden en lugar de devolver falso directamente

Por ejemplo:

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

RemovePolicy()

RemovePolicy elimina una regla de autorización de la política actual.

Por ejemplo:

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

RemovePolicies()

RemovePolicies elimina reglas de autorización de la política actual. La operación es de naturaleza atómica. Por lo tanto, si las reglas de autorización consisten en reglas que no son consistentes con la política actual, la función devuelve falso y ninguna regla de política se elimina de la política actual. Si todas las reglas de autorización son consistentes con las reglas de política, la función devuelve verdadero y cada regla de política se elimina de la política actual.

Por ejemplo:

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

areRulesRemoved := e.RemovePolicies(rules)

RemoveFilteredPolicy()

RemoveFilteredPolicy elimina una regla de autorización de la política actual, se pueden especificar filtros de campo. RemovePolicy elimina una regla de autorización de la política actual.

Por ejemplo:

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

RemoveNamedPolicy()

RemoveNamedPolicy elimina una regla de autorización de la política con nombre actual.

Por ejemplo:

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

RemoveNamedPolicies()

RemoveNamedPolicies elimina reglas de autorización de la política con nombre actual. La operación es de naturaleza atómica. Por lo tanto, si las reglas de autorización consisten en reglas que no son consistentes con la política actual, la función devuelve falso y ninguna regla de política se elimina de la política actual. Si todas las reglas de autorización son consistentes con las reglas de la política, la función devuelve true y cada regla de la política se elimina de la política actual.

Por ejemplo:

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 elimina una regla de autorización de la política nombrada actual, se pueden especificar filtros de campo.

Por ejemplo:

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

HasGroupingPolicy()

HasGroupingPolicy determina si existe una regla de herencia de roles.

Por ejemplo:

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

HasNamedGroupingPolicy()

HasNamedGroupingPolicy determina si existe una regla de herencia de roles nombrada.

Por ejemplo:

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

AddGroupingPolicy()

AddGroupingPolicy añade una regla de herencia de roles a la política actual. Si la regla ya existe, la función devuelve false y la regla no se añadirá. De lo contrario, la función devuelve true al añadir la nueva regla.

Por ejemplo:

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

AddGroupingPolicies()

AddGroupingPolicies añade reglas de herencia de roles a la política actual. La operación es de naturaleza atómica. Por lo tanto, si las reglas de autorización consisten en reglas que no son consistentes con la política actual, la función devuelve false y ninguna regla de la política se añade a la política actual. Si todas las reglas de autorización son consistentes con las reglas de la política, la función devuelve true y cada regla de la política se añade a la política actual.

Por ejemplo:

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

areRulesAdded := e.AddGroupingPolicies(rules)

AddGroupingPoliciesEx()

AddGroupingPoliciesEx añade reglas de herencia de roles a la política actual. Si la regla ya existe, la regla no se añadirá. Pero a diferencia de AddGroupingPolicies, otras reglas no existentes se añaden en lugar de devolver false directamente

Por ejemplo:

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

AddNamedGroupingPolicy()

AddNamedGroupingPolicy añade una regla de herencia de roles nombrada a la política actual. Si la regla ya existe, la función devuelve false y la regla no se añadirá. De lo contrario, la función devuelve true al añadir la nueva regla.

Por ejemplo:

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

AddNamedGroupingPolicies()

AddNamedGroupingPolicies añade reglas de herencia de roles nombradas a la política actual. La operación es de naturaleza atómica. Por lo tanto, si las reglas de autorización consisten en reglas que no son consistentes con la política actual, la función devuelve false y ninguna regla de la política se añade a la política actual. Si todas las reglas de autorización son consistentes con las reglas de la política, la función devuelve true y cada regla de la política se añade a la política actual.

Por ejemplo:

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

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

AddNamedGroupingPoliciesEx()

AddNamedGroupingPoliciesEx añade reglas de herencia de roles nombradas a la política actual. Si la regla ya existe, la regla no se añadirá. Pero a diferencia de AddNamedGroupingPolicies, otras reglas no existentes se añaden en lugar de devolver false directamente

Por ejemplo:

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

RemoveGroupingPolicy()

RemoveGroupingPolicy elimina una regla de herencia de roles de la política actual.

Por ejemplo:

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

RemoveGroupingPolicies()

RemoveGroupingPolicies elimina reglas de herencia de roles de la política actual. La operación es de naturaleza atómica. Por lo tanto, si las reglas de autorización consisten en reglas que no son consistentes con la política actual, la función devuelve false y ninguna regla de la política se elimina de la política actual. Si todas las reglas de autorización son consistentes con las reglas de la política, la función devuelve true y cada regla de la política se elimina de la política actual.

Por ejemplo:

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

areRulesRemoved := e.RemoveGroupingPolicies(rules)

RemoveFilteredGroupingPolicy()

RemoveFilteredGroupingPolicy elimina una regla de herencia de roles de la política actual, se pueden especificar filtros de campo.

Por ejemplo:

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

RemoveNamedGroupingPolicy()

RemoveNamedGroupingPolicy elimina una regla de herencia de roles de la política nombrada actual.

Por ejemplo:

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

RemoveNamedGroupingPolicies()

RemoveNamedGroupingPolicies elimina reglas de herencia de roles nombradas de la política actual. La operación es de naturaleza atómica. Por lo tanto, si las reglas de autorización consisten en reglas que no son consistentes con la política actual, la función devuelve false y ninguna regla de la política se elimina de la política actual. Si todas las reglas de autorización son consistentes con las reglas de la política, la función devuelve true y cada regla de la política se elimina de la política actual.

Por ejemplo:

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

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

RemoveFilteredNamedGroupingPolicy()

RemoveFilteredNamedGroupingPolicy elimina una regla de herencia de roles de la política nombrada actual, se pueden especificar filtros de campo.

Por ejemplo:

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

UpdatePolicy()

UpdatePolicy actualiza una política antigua a una nueva política.

Por ejemplo:

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

UpdatePolicies()

UpdatePolicies actualiza todas las políticas antiguas a nuevas políticas.

Por ejemplo:

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

AddFunction()

AddFunction añade una función personalizada.

Por ejemplo:

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 carga políticas filtradas desde archivo/base de datos.

Por ejemplo:

err := e.LoadFilteredPolicy()

LoadIncrementalFilteredPolicy()

LoadIncrementalFilteredPolicy añade una política filtrada desde archivo/base de datos.

Por ejemplo:

err := e.LoadIncrementalFilteredPolicy()

UpdateGroupingPolicy()

UpdateGroupingPolicy actualiza oldRule a newRule en la sección g

Por ejemplo:

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

UpdateNamedGroupingPolicy()

UpdateNamedGroupingPolicy actualiza oldRule nombrada ptype a newRule en la sección g

Por ejemplo:

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

SetFieldIndex()

SetFieldIndex soporta la personalización del nombre y posición convencionales de sub, obj, domain y priority.

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

Por ejemplo:

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