Pular para o conteúdo principal

Management API

A API primitiva que oferece suporte completo para o gerenciamento de políticas do Casbin.

Filtered API

Quase todas as API filtradas têm os mesmos parâmetros (fieldIndex int, fieldValues ...string). fieldIndex é o índice onde a correspondência começa, fieldValues denota os valores que o resultado deve ter. Observe que a string vazia em fieldValues pode ser qualquer palavra.

Exemplo:

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

Referência

A variável global e é uma instância de Enforcer.

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

Enforce()

Enforce decide se um "subject" pode acessar um "object" com a operação "action", os parâmetros de entrada são geralmente: (sub, obj, act).

Por exemplo:

ok, err := e.Enforce(request)

EnforceWithMatcher()

EnforceWithMatcher usa um comparador personalizado para decidir se um "subject" pode acessar um "object" com a operação "action", os parâmetros de entrada são geralmente: (matcher, sub, obj, act), usa o comparador do modelo por padrão quando matcher é "".

Por exemplo:

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

EnforceEx()

EnforceEx explica a aplicação informando as regras correspondentes.

Por exemplo:

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

EnforceExWithMatcher()

EnforceExWithMatcher usa um comparador personalizado e explica a aplicação informando as regras correspondentes.

Por exemplo:

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

BatchEnforce()

BatchEnforce aplica cada solicitação e retorna o resultado em um array de bool

Por exemplo:

boolArray, err := e.BatchEnforce(requests)

GetAllSubjects()

GetAllSubjects obtém a lista de sujeitos que aparecem na política atual.

Por exemplo:

allSubjects := e.GetAllSubjects()

GetAllNamedSubjects()

GetAllNamedSubjects obtém a lista de sujeitos que aparecem na política nomeada atual.

Por exemplo:

allNamedSubjects := e.GetAllNamedSubjects("p")

GetAllObjects()

GetAllObjects obtém a lista de objetos que aparecem na política atual.

Por exemplo:

allObjects := e.GetAllObjects()

GetAllNamedObjects()

GetAllNamedObjects obtém a lista de objetos que aparecem na política nomeada atual.

Por exemplo:

allNamedObjects := e.GetAllNamedObjects("p")

GetAllActions()

GetAllActions obtém a lista de ações que aparecem na política atual.

Por exemplo:

allActions := e.GetAllActions()

GetAllNamedActions()

GetAllNamedActions obtém a lista de ações que aparecem na política nomeada atual.

Por exemplo:

allNamedActions := e.GetAllNamedActions("p")

GetAllRoles()

GetAllRoles obtém a lista de papéis que aparecem na política atual.

Por exemplo:

allRoles = e.GetAllRoles()

GetAllNamedRoles()

GetAllNamedRoles obtém a lista de papéis que aparecem na política nomeada atual.

Por exemplo:

allNamedRoles := e.GetAllNamedRoles("g")

GetPolicy()

GetPolicy obtém todas as regras de autorização na política.

Por exemplo:

policy = e.GetPolicy()

GetFilteredPolicy()

GetFilteredPolicy obtém todas as regras de autorização na política, filtros de campo podem ser especificados.

Por exemplo:

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

GetNamedPolicy()

GetNamedPolicy obtém todas as regras de autorização na política nomeada.

Por exemplo:

namedPolicy := e.GetNamedPolicy("p")

GetFilteredNamedPolicy()

GetFilteredNamedPolicy obtém todas as regras de autorização na política nomeada, filtros de campo podem ser especificados.

Por exemplo:

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

GetGroupingPolicy()

GetGroupingPolicy obtém todas as regras de herança de papéis na política.

Por exemplo:

groupingPolicy := e.GetGroupingPolicy()

GetFilteredGroupingPolicy()

GetFilteredGroupingPolicy obtém todas as regras de herança de papéis na política, filtros de campo podem ser especificados.

Por exemplo:

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

GetNamedGroupingPolicy()

GetNamedGroupingPolicy obtém todas as regras de herança de papéis na política nomeada.

Por exemplo:

namedGroupingPolicy := e.GetNamedGroupingPolicy("g")

GetFilteredNamedGroupingPolicy()

GetFilteredNamedGroupingPolicy obtém todas as regras de herança de papéis na política nomeada.

Por exemplo:

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

HasPolicy()

HasPolicy determina se uma regra de autorização existe.

Por exemplo:

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

HasNamedPolicy()

HasNamedPolicy determina se uma regra de autorização nomeada existe.

Por exemplo:

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

AddPolicy()

AddPolicy adiciona uma regra de autorização à política atual. Se a regra já existe, a função retorna falso e a regra não será adicionada. Caso contrário, a função retorna verdadeiro ao adicionar a nova regra.

Por exemplo:

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

AddPolicies()

AddPolicies adiciona regras de autorização à política atual. A operação é de natureza atômica. Portanto, se as regras de autorização consistem em regras que não são consistentes com a política atual, a função retorna falso e nenhuma regra de política é adicionada à política atual. Se todas as regras de autorização são consistentes com as regras da política, a função retorna verdadeiro e cada regra de política é adicionada à política atual.

Por exemplo:

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

areRulesAdded := e.AddPolicies(rules)

AddPoliciesEx()

AddPoliciesEx adiciona regras de autorização à política atual. Se a regra já existe, a regra não será adicionada. Mas, ao contrário de AddPolicies, outras regras não existentes são adicionadas em vez de retornar falso diretamente

Por exemplo:

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

AddNamedPolicy()

AddNamedPolicy adiciona uma regra de autorização à política nomeada atual. Se a regra já existe, a função retorna falso e a regra não será adicionada. Caso contrário, a função retorna verdadeiro ao adicionar a nova regra.

Por exemplo:

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

AddNamedPolicies()

AddNamedPolicies adiciona regras de autorização à política nomeada atual. A operação é de natureza atômica. Portanto, se as regras de autorização consistem em regras que não são consistentes com a política atual, a função retorna falso e nenhuma regra de política é adicionada à política atual. Se todas as regras de autorização são consistentes com as regras da política, a função retorna verdadeiro e cada regra de política é adicionada à política atual.

Por exemplo:

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 adiciona regras de autorização à política nomeada atual. Se a regra já existe, a regra não será adicionada. Mas, ao contrário de AddNamedPolicies, outras regras não existentes são adicionadas em vez de retornar falso diretamente

Por exemplo:

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

SelfAddPoliciesEx()

SelfAddPoliciesEx adiciona regras de autorização à política nomeada atual com autoNotifyWatcher desativado. Se a regra já existe, a regra não será adicionada. Mas, ao contrário de SelfAddPolicies, outras regras não existentes são adicionadas em vez de retornar falso diretamente

Por exemplo:

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

RemovePolicy()

RemovePolicy remove uma regra de autorização da política atual.

Por exemplo:

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

RemovePolicies()

RemovePolicies remove regras de autorização da política atual. A operação é de natureza atômica. Portanto, se as regras de autorização consistem em regras que não são consistentes com a política atual, a função retorna falso e nenhuma regra de política é removida da política atual. Se todas as regras de autorização são consistentes com as regras da política, a função retorna verdadeiro e cada regra de política é removida da política atual.

Por exemplo:

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

areRulesRemoved := e.RemovePolicies(rules)

RemoveFilteredPolicy()

RemoveFilteredPolicy remove uma regra de autorização da política atual, filtros de campo podem ser especificados. RemovePolicy remove uma regra de autorização da política atual.

Por exemplo:

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

RemoveNamedPolicy()

RemoveNamedPolicy remove uma regra de autorização da política nomeada atual.

Por exemplo:

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

RemoveNamedPolicies()

RemoveNamedPolicies remove regras de autorização da política nomeada atual. A operação é de natureza atômica. Portanto, se as regras de autorização consistem em regras que não são consistentes com a política atual, a função retorna falso e nenhuma regra de política é removida da política atual. Se todas as regras de autorização forem consistentes com as regras da política, a função retorna verdadeiro e cada regra da política é removida da política atual.

Por exemplo:

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 remove uma regra de autorização da política nomeada atual, filtros de campo podem ser especificados.

Por exemplo:

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

HasGroupingPolicy()

HasGroupingPolicy determina se uma regra de herança de papel existe.

Por exemplo:

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

HasNamedGroupingPolicy()

HasNamedGroupingPolicy determina se uma regra de herança de papel nomeada existe.

Por exemplo:

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

AddGroupingPolicy()

AddGroupingPolicy adiciona uma regra de herança de papel à política atual. Se a regra já existe, a função retorna falso e a regra não será adicionada. Caso contrário, a função retorna verdadeiro ao adicionar a nova regra.

Por exemplo:

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

AddGroupingPolicies()

AddGroupingPolicies adiciona regras de herança de papel à política atual. A operação é de natureza atômica. Portanto, se as regras de autorização consistem em regras que não são consistentes com a política atual, a função retorna falso e nenhuma regra da política é adicionada à política atual. Se todas as regras de autorização forem consistentes com as regras da política, a função retorna verdadeiro e cada regra da política é adicionada à política atual.

Por exemplo:

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

areRulesAdded := e.AddGroupingPolicies(rules)

AddGroupingPoliciesEx()

AddGroupingPoliciesEx adiciona regras de herança de papel à política atual. Se a regra já existe, a regra não será adicionada. Mas, ao contrário de AddGroupingPolicies, outras regras não existentes são adicionadas em vez de retornar falso diretamente

Por exemplo:

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

AddNamedGroupingPolicy()

AddNamedGroupingPolicy adiciona uma regra de herança de papel nomeada à política atual. Se a regra já existe, a função retorna falso e a regra não será adicionada. Caso contrário, a função retorna verdadeiro ao adicionar a nova regra.

Por exemplo:

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

AddNamedGroupingPolicies()

AddNamedGroupingPolicies adiciona regras de herança de papel nomeadas à política atual. A operação é de natureza atômica. Portanto, se as regras de autorização consistem em regras que não são consistentes com a política atual, a função retorna falso e nenhuma regra da política é adicionada à política atual. Se todas as regras de autorização forem consistentes com as regras da política, a função retorna verdadeiro e cada regra da política é adicionada à política atual.

Por exemplo:

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

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

AddNamedGroupingPoliciesEx()

AddNamedGroupingPoliciesEx adiciona regras de herança de papel nomeadas à política atual. Se a regra já existe, a regra não será adicionada. Mas, ao contrário de AddNamedGroupingPolicies, outras regras não existentes são adicionadas em vez de retornar falso diretamente

Por exemplo:

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

RemoveGroupingPolicy()

RemoveGroupingPolicy remove uma regra de herança de papel da política atual.

Por exemplo:

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

RemoveGroupingPolicies()

RemoveGroupingPolicies remove regras de herança de papel da política atual. A operação é de natureza atômica. Portanto, se as regras de autorização consistem em regras que não são consistentes com a política atual, a função retorna falso e nenhuma regra da política é removida da política atual. Se todas as regras de autorização forem consistentes com as regras da política, a função retorna verdadeiro e cada regra da política é removida da política atual.

Por exemplo:

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

areRulesRemoved := e.RemoveGroupingPolicies(rules)

RemoveFilteredGroupingPolicy()

RemoveFilteredGroupingPolicy remove uma regra de herança de papel da política atual, filtros de campo podem ser especificados.

Por exemplo:

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

RemoveNamedGroupingPolicy()

RemoveNamedGroupingPolicy remove uma regra de herança de papel da política nomeada atual.

Por exemplo:

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

RemoveNamedGroupingPolicies()

RemoveNamedGroupingPolicies remove regras de herança de papel nomeadas da política atual. A operação é de natureza atômica. Portanto, se as regras de autorização consistem em regras que não são consistentes com a política atual, a função retorna falso e nenhuma regra da política é removida da política atual. Se todas as regras de autorização forem consistentes com as regras da política, a função retorna verdadeiro e cada regra da política é removida da política atual.

Por exemplo:

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

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

RemoveFilteredNamedGroupingPolicy()

RemoveFilteredNamedGroupingPolicy remove uma regra de herança de função da política nomeada atual, filtros de campo podem ser especificados.

Por exemplo:

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

UpdatePolicy()

UpdatePolicy atualiza uma política antiga para uma nova política.

Por exemplo:

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

UpdatePolicies()

UpdatePolicies atualiza todas as políticas antigas para novas políticas.

Por exemplo:

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

AddFunction()

AddFunction adiciona uma função personalizada.

Por exemplo:

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 carrega políticas filtradas de arquivo/banco de dados.

Por exemplo:

err := e.LoadFilteredPolicy()

LoadIncrementalFilteredPolicy()

LoadIncrementalFilteredPolicy anexa uma política filtrada de arquivo/banco de dados.

Por exemplo:

err := e.LoadIncrementalFilteredPolicy()

UpdateGroupingPolicy()

UpdateGroupingPolicy atualiza oldRule para newRule na seção g

Por exemplo:

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

UpdateNamedGroupingPolicy()

UpdateNamedGroupingPolicy atualiza oldRule nomeada ptype para newRule na seção g

Por exemplo:

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

SetFieldIndex()

SetFieldIndex suporta a personalização do nome e posição convencionais de sub, obj, domain e priority.

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

Por exemplo:

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