Vai al contenuto principale

Management API

L'API primitiva che fornisce supporto completo per la gestione delle politiche di Casbin.

Filtered API

Quasi tutte le API filtrate hanno gli stessi parametri (fieldIndex int, fieldValues ...string). fieldIndex è l'indice da cui inizia la corrispondenza, fieldValues indica i valori che il risultato dovrebbe avere. Nota che una stringa vuota in fieldValues potrebbe essere qualsiasi parola.

Esempio:

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

Riferimento

La variabile globale e è un'istanza di Enforcer.

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

Enforce()

Enforce decide se un "soggetto" può accedere a un "oggetto" con l'operazione "azione", i parametri di input sono solitamente: (sub, obj, act).

Ad esempio:

ok, err := e.Enforce(request)

EnforceWithMatcher()

EnforceWithMatcher utilizza un matcher personalizzato per decidere se un "soggetto" può accedere a un "oggetto" con l'operazione "azione", i parametri di input sono solitamente: (matcher, sub, obj, act), utilizza il matcher del modello di default quando matcher è "".

Ad esempio:

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

EnforceEx()

EnforceEx spiega l'applicazione delle regole informando le regole abbinate.

Ad esempio:

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

EnforceExWithMatcher()

EnforceExWithMatcher utilizza un matcher personalizzato e spiega l'applicazione delle regole informando le regole abbinate.

Ad esempio:

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

BatchEnforce()

BatchEnforce applica ogni richiesta e restituisce il risultato in un array di bool

Ad esempio:

boolArray, err := e.BatchEnforce(requests)

GetAllSubjects()

GetAllSubjects ottiene la lista dei soggetti che compaiono nella politica corrente.

Ad esempio:

allSubjects := e.GetAllSubjects()

GetAllNamedSubjects()

GetAllNamedSubjects ottiene la lista dei soggetti che compaiono nella politica nominata corrente.

Ad esempio:

allNamedSubjects := e.GetAllNamedSubjects("p")

GetAllObjects()

GetAllObjects ottiene la lista degli oggetti che compaiono nella politica corrente.

Per esempio:

allObjects := e.GetAllObjects()

GetAllNamedObjects()

GetAllNamedObjects ottiene la lista degli oggetti che compaiono nella politica nominata corrente.

Per esempio:

allNamedObjects := e.GetAllNamedObjects("p")

GetAllActions()

GetAllActions ottiene la lista delle azioni che compaiono nella politica corrente.

Per esempio:

allActions := e.GetAllActions()

GetAllNamedActions()

GetAllNamedActions ottiene la lista delle azioni che compaiono nella politica nominata corrente.

Ad esempio:

allNamedActions := e.GetAllNamedActions("p")

GetAllRoles()

GetAllRoles ottiene la lista dei ruoli che compaiono nella politica corrente.

Ad esempio:

allRoles = e.GetAllRoles()

GetAllNamedRoles()

GetAllNamedRoles ottiene la lista dei ruoli che compaiono nella politica nominata corrente.

Ad esempio:

allNamedRoles := e.GetAllNamedRoles("g")

GetPolicy()

GetPolicy ottiene tutte le regole di autorizzazione nella politica.

Ad esempio:

policy = e.GetPolicy()

GetFilteredPolicy()

GetFilteredPolicy ottiene tutte le regole di autorizzazione nella policy, è possibile specificare filtri per i campi.

Ad esempio:

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

GetNamedPolicy()

GetNamedPolicy ottiene tutte le regole di autorizzazione nella policy nominata.

Ad esempio:

namedPolicy := e.GetNamedPolicy("p")

GetFilteredNamedPolicy()

GetFilteredNamedPolicy ottiene tutte le regole di autorizzazione nella policy nominata, è possibile specificare filtri per i campi.

Ad esempio:

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

GetGroupingPolicy()

GetGroupingPolicy ottiene tutte le regole di ereditarietà del ruolo nella policy.

Ad esempio:

groupingPolicy := e.GetGroupingPolicy()

GetFilteredGroupingPolicy()

GetFilteredGroupingPolicy ottiene tutte le regole di ereditarietà del ruolo nella policy, con filtri sui campi specificabili.

Ad esempio:

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

GetNamedGroupingPolicy()

GetNamedGroupingPolicy ottiene tutte le regole di ereditarietà del ruolo nella policy.

Ad esempio:

namedGroupingPolicy := e.GetNamedGroupingPolicy("g")

GetFilteredNamedGroupingPolicy()

GetFilteredNamedGroupingPolicy recupera tutte le regole di ereditarietà dei ruoli nella policy.

Ad esempio:

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

HasPolicy()

HasPolicy determina se una regola di autorizzazione esiste.

Ad esempio:

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

HasNamedPolicy()

HasNamedPolicy determina se una regola di autorizzazione nominata esiste.

Ad esempio:

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

AddPolicy()

AddPolicy aggiunge una regola di autorizzazione alla policy corrente. Se la regola esiste già, la funzione restituisce falso e la regola non verrà aggiunta. Altrimenti, la funzione restituisce vero aggiungendo la nuova regola.

Per esempio:

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

AddPolicies()

AddPolicies aggiunge regole di autorizzazione alla politica corrente. L'operazione è di natura atomica. Pertanto, se le regole di autorizzazione consistono in regole che non sono coerenti con la politica corrente, la funzione restituisce falso e nessuna regola di politica viene aggiunta alla politica corrente. Se tutte le regole di autorizzazione sono coerenti con le regole di politica, la funzione restituisce vero e ogni regola di politica viene aggiunta alla politica corrente.

Per esempio:

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

areRulesAdded := e.AddPolicies(rules)

AddPoliciesEx()

AddPoliciesEx aggiunge regole di autorizzazione alla politica corrente. Se la regola esiste già, la regola non verrà aggiunta. Ma a differenza di AddPolicies, altre regole non esistenti vengono aggiunte invece di restituire false direttamente.

Ad esempio:

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

AddNamedPolicy()

AddNamedPolicy aggiunge una regola di autorizzazione alla politica corrente con nome. Se la regola esiste già, la funzione restituisce false e la regola non verrà aggiunta. Altrimenti, la funzione restituisce true aggiungendo la nuova regola.

Ad esempio:

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

AddNamedPolicies()

AddNamedPolicies aggiunge regole di autorizzazione alla politica corrente con nome. L'operazione è di natura atomica. Pertanto, se le regole di autorizzazione consistono in regole che non sono coerenti con la politica corrente, la funzione restituisce false e nessuna regola di politica viene aggiunta alla politica corrente. Se tutte le regole di autorizzazione sono coerenti con le regole di politica, la funzione restituisce true e ogni regola di politica viene aggiunta alla politica corrente.

Ad esempio:

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 aggiunge regole di autorizzazione alla politica corrente con nome. Se la regola esiste già, la regola non verrà aggiunta. Ma a differenza di AddNamedPolicies, altre regole non esistenti vengono aggiunte invece di restituire false direttamente.

Ad esempio:

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

SelfAddPoliciesEx()

SelfAddPoliciesEx aggiunge regole di autorizzazione alla politica corrente con nome specifico con autoNotifyWatcher disabilitato. Se la regola esiste già, la regola non verrà aggiunta. Ma a differenza di SelfAddPolicies, altre regole non esistenti vengono aggiunte invece di restituire false direttamente.

Per esempio:

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

RemovePolicy()

RemovePolicy rimuove una regola di autorizzazione dalla politica corrente.

Per esempio:

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

RemovePolicies()

RemovePolicies rimuove regole di autorizzazione dalla politica corrente. L'operazione è di natura atomica. Quindi, se le regole di autorizzazione consistono in regole che non sono coerenti con la politica corrente, la funzione restituisce false e nessuna regola di politica viene rimossa dalla politica corrente. Se tutte le regole di autorizzazione sono coerenti con le regole di politica, la funzione restituisce true e ogni regola di politica viene rimossa dalla politica corrente.

Per esempio:

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

areRulesRemoved := e.RemovePolicies(rules)

RemoveFilteredPolicy()

RemoveFilteredPolicy rimuove una regola di autorizzazione dalla politica corrente, i filtri dei campi possono essere specificati. RemovePolicy rimuove una regola di autorizzazione dalla politica corrente.

Per esempio:

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

RemoveNamedPolicy()

RemoveNamedPolicy rimuove una regola di autorizzazione dalla politica nominata corrente.

Ad esempio:

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

RemoveNamedPolicies()

RemoveNamedPolicies rimuove le regole di autorizzazione dalla politica corrente con nome. L'operazione è di natura atomica. Pertanto, se le regole di autorizzazione consistono in regole che non sono coerenti con la politica corrente, la funzione restituisce false e nessuna regola di politica viene rimossa dalla politica corrente. Se tutte le regole di autorizzazione sono coerenti con le regole di politica, la funzione restituisce true e ogni regola di politica viene rimossa dalla politica corrente.

Ad esempio:

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 rimuove una regola di autorizzazione dalla politica corrente con nome, i filtri dei campi possono essere specificati.

Ad esempio:

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

HasGroupingPolicy()

HaPoliticaDiGruppo determina se esiste una regola di ereditarietà del ruolo.

Ad esempio:

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

HasNamedGroupingPolicy()

HaPoliticaDiGruppoNominata determina se esiste una regola di ereditarietà del ruolo nominata.

Ad esempio:

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

AddGroupingPolicy()

AggiungiPoliticaDiGruppo aggiunge una regola di ereditarietà del ruolo alla politica corrente. Se la regola esiste già, la funzione restituisce false e la regola non verrà aggiunta. Altrimenti, la funzione restituisce true aggiungendo la nuova regola.

Ad esempio:

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

AddGroupingPolicies()

AddGroupingPolicies aggiunge regole di ereditarietà del ruolo alla politica corrente. L'operazione è di natura atomica. Pertanto, se le regole di autorizzazione consistono in regole che non sono coerenti con la politica corrente, la funzione restituisce false e nessuna regola di politica viene aggiunta alla politica corrente. Se tutte le regole di autorizzazione sono coerenti con le regole di politica, la funzione restituisce true e ogni regola di politica viene aggiunta alla politica corrente.

Ad esempio:

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

areRulesAdded := e.AddGroupingPolicies(rules)

AddGroupingPoliciesEx()

AddGroupingPoliciesEx aggiunge regole di ereditarietà del ruolo alla politica corrente. Se la regola esiste già, la regola non verrà aggiunta. Ma a differenza di AddGroupingPolicies, altre regole inesistenti vengono aggiunte invece di restituire false direttamente.

Ad esempio:

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

AddNamedGroupingPolicy()

AddNamedGroupingPolicy aggiunge una regola di ereditarietà del ruolo nominato alla politica corrente. Se la regola esiste già, la funzione restituisce false e la regola non verrà aggiunta. Altrimenti la funzione restituisce true aggiungendo la nuova regola.

Ad esempio:

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

AddNamedGroupingPolicies()

AddNamedGroupingPolicies aggiunge regole di ereditarietà del ruolo nominato alla politica corrente. L'operazione è di natura atomica. Quindi, se le regole di autorizzazione consistono in regole che non sono coerenti con la politica corrente, la funzione restituisce false e nessuna regola di politica viene aggiunta alla politica corrente. Se tutte le regole di autorizzazione sono coerenti con le regole di politica, la funzione restituisce true e ogni regola di politica viene aggiunta alla politica corrente.

Ad esempio:

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

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

AddNamedGroupingPoliciesEx()

AddNamedGroupingPoliciesEx aggiunge regole di ereditarietà di ruolo denominate alla politica corrente. Se la regola esiste già, la regola non verrà aggiunta. Ma a differenza di AddNamedGroupingPolicies, altre regole non esistenti vengono aggiunte invece di restituire false direttamente.

Ad esempio:

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

RemoveGroupingPolicy()

RemoveGroupingPolicy rimuove una regola di ereditarietà di ruolo dalla politica corrente.

Ad esempio:

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

RemoveGroupingPolicies()

RemoveGroupingPolicies rimuove le regole di ereditarietà del ruolo dalla politica corrente. L'operazione è di natura atomica. Pertanto, se le regole di autorizzazione consistono in regole che non sono coerenti con la politica corrente, la funzione restituisce false e nessuna regola di politica viene rimossa dalla politica corrente. Se tutte le regole di autorizzazione sono coerenti con le regole di politica, la funzione restituisce true e ogni regola di politica viene rimossa dalla politica corrente.

Ad esempio:

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

areRulesRemoved := e.RemoveGroupingPolicies(rules)

RemoveFilteredGroupingPolicy()

RemoveFilteredGroupingPolicy rimuove una regola di ereditarietà del ruolo dalla politica corrente, è possibile specificare filtri sui campi.

Ad esempio:

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

RemoveNamedGroupingPolicy()

RimuoviPoliticaDiGruppoNominata rimuove una regola di ereditarietà del ruolo dalla politica nominata corrente.

Ad esempio:

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

RemoveNamedGroupingPolicies()

RimuoviPoliticheDiGruppoNominate rimuove regole di ereditarietà del ruolo nominate dalla politica corrente. L'operazione è di natura atomica. Pertanto, se le regole di autorizzazione consistono in regole che non sono coerenti con la politica corrente, la funzione restituisce false e nessuna regola di politica viene rimossa dalla politica corrente. Se tutte le regole di autorizzazione sono coerenti con le regole di politica, la funzione restituisce true e ogni regola di politica viene rimossa dalla politica corrente.

Ad esempio:

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

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

RemoveFilteredNamedGroupingPolicy()

RemoveFilteredNamedGroupingPolicy rimuove una regola di ereditarietà del ruolo dalla politica nominata corrente, è possibile specificare filtri sui campi.

Per esempio:

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

UpdatePolicy()

UpdatePolicy aggiorna una vecchia politica a una nuova politica.

Per esempio:

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

UpdatePolicies()

UpdatePolicies aggiorna tutte le vecchie politiche a nuove politiche.

Per esempio:

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

AddFunction()

AddFunction aggiunge una funzione personalizzata.

Ad esempio:

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 carica politiche filtrate dal file/database.

Ad esempio:

err := e.LoadFilteredPolicy()

LoadIncrementalFilteredPolicy()

LoadIncrementalFilteredPolicy aggiunge una politica filtrata dal file/database.

Ad esempio:

err := e.LoadIncrementalFilteredPolicy()

UpdateGroupingPolicy()

UpdateGroupingPolicy aggiorna oldRule a newRule nella sezione g

Ad esempio:

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

UpdateNamedGroupingPolicy()

AggiornaPoliticaDiGruppoNominata aggiorna la vecchia regola nominata ptype alla nuova regola nella sezione g

Ad esempio:

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

SetFieldIndex()

ImpostaIndiceCampo supporta la personalizzazione del nome convenzionale e della posizione di sub, obj, domain e priority.

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

Ad esempio:

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