Vai al contenuto principale

Management API

The Management API covers all policy and grouping (role) operations: get, add, remove, update, filter. Below, e is an Enforcer instance.

Filtered API​

Filtered methods take (fieldIndex int, fieldValues ...string): matching starts at fieldIndex, and fieldValues are the required values at consecutive positions. Use "" in fieldValues as a wildcard for that position.

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") // 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 Reference​

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 è "".

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

EnforceEx()​

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

boolArray, err := e.BatchEnforce(requests)

GetAllSubjects()​

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

allSubjects := e.GetAllSubjects()

GetAllNamedSubjects()​

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

allNamedSubjects := e.GetAllNamedSubjects("p")

GetAllObjects()​

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

allObjects := e.GetAllObjects()

GetAllNamedObjects()​

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

allNamedObjects := e.GetAllNamedObjects("p")

GetAllActions()​

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

allActions := e.GetAllActions()

GetAllNamedActions()​

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

allNamedActions := e.GetAllNamedActions("p")

GetAllRoles()​

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

allRoles = e.GetAllRoles()

GetAllNamedRoles()​

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

allNamedRoles := e.GetAllNamedRoles("g")

GetPolicy()​

GetPolicy ottiene tutte le regole di autorizzazione nella politica.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

policy = e.GetPolicy()

GetFilteredPolicy()​

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

GetNamedPolicy()​

GetNamedPolicy ottiene tutte le regole di autorizzazione nella policy nominata.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

namedPolicy := e.GetNamedPolicy("p")

GetFilteredNamedPolicy()​

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

GetGroupingPolicy()​

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

groupingPolicy := e.GetGroupingPolicy()

GetFilteredGroupingPolicy()​

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

GetNamedGroupingPolicy()​

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

namedGroupingPolicy := e.GetNamedGroupingPolicy("g")

GetFilteredNamedGroupingPolicy()​

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

HasPolicy()​

HasPolicy determina se una regola di autorizzazione esiste.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

HasNamedPolicy()​

HasNamedPolicy determina se una regola di autorizzazione nominata esiste.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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 false e la regola non verrà aggiunta. Altrimenti la funzione restituisce true aggiungendo la nuova regola.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

AddPolicies()​

AddPolicies aggiunge regole di autorizzazione 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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

AddNamedPolicies()​

AddNamedPolicies aggiunge regole di autorizzazione alla politica corrente con nome. 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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

RemovePolicy()​

RemovePolicy rimuove una regola di autorizzazione dalla politica corrente.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

RemovePolicies()​

RemovePolicies rimuove regole di autorizzazione 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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

RemoveNamedPolicy()​

RemoveNamedPolicy rimuove una regola di autorizzazione dalla politica nominata corrente.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

HasGroupingPolicy()​

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

HasNamedGroupingPolicy()​

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

AddGroupingPolicies()​

AddGroupingPolicies aggiunge regole di ereditarietà del ruolo 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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

RemoveGroupingPolicy()​

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

RemoveNamedGroupingPolicy()​

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

UpdatePolicy()​

UpdatePolicy aggiorna una vecchia politica a una nuova politica.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

UpdatePolicies()​

UpdatePolicies aggiorna tutte le vecchie politiche a nuove politiche.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

AddFunction()​

AddFunction aggiunge una funzione personalizzata.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

err := e.LoadFilteredPolicy()

LoadIncrementalFilteredPolicy()​

LoadIncrementalFilteredPolicy aggiunge una politica filtrata dal file/database.

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

err := e.LoadIncrementalFilteredPolicy()

UpdateGroupingPolicy()​

UpdateGroupingPolicy aggiorna oldRule a newRule nella sezione g

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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

GetImplicitUsersForResource restituisce utenti impliciti basati sul risorsa.

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