2016-05-12 13 views
0

Ich frage mich, wie kann ich ein Benutzerrollen aktualisieren, habe ich folgende Möglichkeiten ausprobiert:
(Hinweis: User = Personne, Userrole = PersonneRole)
die Liste löschen und ihn durch einen neuen zu ersetzen:Wie ersetzt man die Rollensammlung des Benutzers durch eine andere?

@Transactional 
    def myaction(Personne personne,List<String> roles){ // roles is a list of authorities 
      def role 
      personne.personneRoles*.delete()// tried PersonneRoles.findByPersonne(personne)*.delete() as well 
      personne.personneRoles.clear() 
      roles.each { role=Role.findByAuthority(it);personne.personneRoles.add(new PersonneRole(personne,role)) } 
      if(!personne.save(flush:true)) 
       return false 
      .... 

ich this tutorial auch befolgt haben, aber hat nicht funktioniert:

@Transactional 
def action(Personne personne,List<String> roles){ 
    def role 
    def temp = [] 
    temp += personne.personneRoles 
    temp.each{personneRole -> 
     personne.removeFromPersonneRoles(personneRole) 
     personneRole.delete() 
    } 
    roles.each { role=Role.findByAuthority(it);personne.personneRoles.add(new PersonneRole(personne,role)) } 
    if(!personne.save(flush:true)) 
     return false 
... 

in beiden Fällen bekomme ich einen Fehler mir zu sagen, dass“.... abgelehnt Wert [ROLE_ADMIN_APP]
das ist eine gültige Rolle, aber ist schon nach der Person, das heißt, dass die Sammlung nicht gelöscht ist, keine Lösung bitte? Danke

+0

Möglicherweise müssen Sie eine 'personne.save()' zwischen dem Löschen der Rollen und dem Hinzufügen der neuen durchführen. –

+0

muss ich die Aktion @NonTrasctionnal machen? – hereForLearing

+0

Nein, das tust du nicht. –

Antwort

3

werfen Sie einen Blick in grails.plugin.springsecurity.ui.SpringSecurityUiService im Frühjahr Sicherheit UI-Plugin https://github.com/grails-plugins/grails-spring-security-ui/blob/master/grails-app/services/grails/plugin/springsecurity/ui/SpringSecurityUiService.groovy und sehen, wie er es macht. Es fällt alle zugehörigen Rollen und wieder fügt sie (siehe Leere Updateuser)

UserRole.removeAll user 
    addRoles user, roleNames 
    removeUserFromCache user 
+0

removeAll löscht alle Rollen, kann aber keine neuen Rollen erstellen: / – hereForLearing

0

hier ist, was funktioniert hat:

def myaction(Personne personne,List<String> roles){ 
     def role 
     personne.personneRoles.clear() 
     PersonneRole.removeAll(personne) 
     roles.each { 
      role=Role.findByAuthority(it) 
      personne.addToPersonneRoles(new PersonneRole(personne,role)) 
     } 
     if(!personne.save()) 
     ... 

aber ich hatte hinzuzufügen:

personneRoles cascade: "all-delete-orphan" 

meiner Klasse Personne oder ich bekomme folgende Fehlermeldung:

A different object with the same identifier value was already associated with the session : [ma.ac.uir.ecine.authentification.PersonneRole#PersonneRole(personne:Personne(email:[email protected]), role:Role(authority:ROLE_MEMBRE), id:null, version:null)] 

kann mir jemand erklären warum bitte?

Verwandte Themen