/ / Concedere il ruolo di "classe" nella sicurezza di primavera - graal, sicurezza di primavera

Concedere il ruolo di "classe" nella sicurezza di primavera: graal, sicurezza primaverile

Ecco una struttura (fittizia) (mi dispiace, so di non avere una forte immaginazione) che assomiglia alla struttura della mia domanda: (Person, SuperPerson e NormalPerson sono astratti):

Gerarchia di persone

Mi chiedo se posso assegnare ruoli a ogni classe (così tutte le istanze di questa classe otterranno questi diritti) usando la sicurezza di primavera in Grails.

risposte:

1 per risposta № 1

No, Spring Security assegna i ruoli all'istanza, non al livello di classe.

Esistono due modi per concedere le autorizzazioni (autorizzazioni):

  1. Concedi direttamente a un principio (utente)
  2. Concederli a un gruppo (ruolo), quindi aggiungere i principi ai gruppi contenenti le autorità necessarie.

Quindi, nel tuo caso, puoi adottare l'approccio basato sui ruoli e far rappresentare ciascuna classe da un ruolo. Quindi, quando si crea un'istanza di una classe, aggiungerla al ruolo appropriato.

Esempio di utilizzo di un servizio per concedere autorizzazioni

class PersonService {

private Map authorityGroups = [
Person: ["Person"],
NormalPerson: ["Person", "NormalPerson"],
Employee: ["Person", "NormalPerson", "Employee"],
...
]

Person create(Class klass, Map props) {
def person = klass.newInstance(props)
def groups = getGroupsForClass(klass)

person.save()

groups.each {
new PersonAuthorityGroup(authorityGroup: it, person: person).save()
}
}

private Collection<AuthorityGroup> getGroupsForClass(Class klass) {
authoritiyGroups[klass.simpleName].collect {
AuthorityGroup.findByName(it)
}
}
}

Il servizio può quindi essere utilizzato in questo modo:

def a = personService.create(Person, [first: "John", last: "Galt"])
def b = personService.create(SuperPerson, [first: "Jane", last: "Smith"])