Grals Frühjahr Sicherheitsrolle und Gruppe

8

Ich habe meine Federsicherheit konfiguriert, um mit Gruppen zu arbeiten.

Ich habe diesen Scipt verwendet, um die Domain-Klassen zu erstellen:

%Vor%

Ich nahm an, dass ein Benutzer viele Gruppen haben kann, in denen eine Gruppe viele Rollen haben kann

So sieht eine generierte Methode in der Benutzerklasse aus:

%Vor%

Aber jetzt habe ich gesehen, dass das Skript auch eine Klasse namens UserRole erstellt hat, die die Verbindung zwischen Benutzer und Rolle darstellt. Also kann ein Benutzer auch viele Rollen direkt haben?

Ich habe es versucht und es ist in der Datenbank gespeichert. Ich habe die Methode folgendermaßen geändert:

%Vor%

Wenn ich nun einen Eintrag in der Datenbank im User & lt; - & gt; Rollenzuordnung Ich kann mich nicht mehr einloggen. Ich bekomme die Standard-Nachricht von Spring Security im Grunde gesagt, dass keine Anmeldeinformationen gefunden wurden.

Wenn ich den Eintrag manuell lösche, kann ich mich erneut anmelden. Ich denke, das liegt daran, dass die Methode dann nur RoleGroup-Objekte zurückgibt.

Meine Fragen sind:

a) kann ich Rollen auch direkt zuweisen, wenn ich Gruppen

konfiguriert habe

b) Wenn nein, warum erstellt das Skript diese Klasse?

c) Wenn ja, wie mache ich das?

    
Bernhard 09.12.2015, 15:01
quelle

3 Antworten

2

Ich denke nicht, dass Sie erwarten würden, dass Sie Role direkt auf User zuweisen, wenn Sie Groups verwenden.

Weisen Sie% User% einem Group zu, und Role einem Group .

Ich denke, dass die vorgestellte Codestruktur nützlich sein kann, wenn Sie Ihre App "downgraden"

, um nur User und Roles zu verwenden, ohne Ihr aktuelles Regelwerk zu brechen.

    
shaydel 14.12.2015, 11:17
quelle
1

Es ist nur meine Meinung: Skript erstellt UserRole, weil es nur Optimierungsklasse zum Beispiel, wenn Sie Role von db erhalten und versucht, einige Benutzer Ruhezustand finden sollte alle Benutzer von Proxy empfangen werden. Es ist nur eine Optimierungsklasse. Wenn Sie eine Rolle pro Benutzer haben möchten, können Sie sie in UserRole.create () einrichten. Fügen Sie eine Einschränkung hinzu und es sollte funktionieren. Ich hoffe du verstehst mich und ich habe dich richtig verstanden. Einen schönen Tag noch!

    
Koloritnij 10.12.2015 14:47
quelle
0

Ein bisschen alt, aber könnte für jeden anderen, der versucht, Gruppen in die Hand nehmen:

In der Benutzerklasse:

%Vor%

Ich habe Rollen verwendet, obwohl Gruppen aktiviert und gegen die alte oldRoles-Methode authentifiziert wurden:

%Vor%

und in meinem spring / resources.groovy:

%Vor%

Was oben bereits gemacht wurde, ging zurück zu Benutzer-ROLES und fügte sie zum Authentifizierungs-Handler über .. getAuthorities (user.oldRoles)

hinzu

Ich habe jetzt die obige Methode geändert, um die Gruppennamen über getAuthoritiesFromGroup (user.authorities) einzulesen

Dies parst einfach die Gruppennamen, die als eine Seite (Wirkung) der Version, die ich verwende, auch das Wort ROLE_GROUPNAME

enthalten muss

Also jetzt, wenn create

%Vor%

Ich erwarte, dass ich mich gegen die Gruppennamen und nicht die Benutzerrollen authentifizieren werde. Kurz gesagt, ich musste meinen Controller in

ändern %Vor%

hoffe, es macht Sinn, sollte einfach zu folgen, braucht nur Zeit, um Ihren Kopf herum zu bekommen ..

An diesem Punkt spiele ich immer noch herum und würde das nicht als konkrete Antwort verwenden, da ich es irgendwie hacke, um zu sagen, dass ich meine Gruppen als meine Autoritäten hinzufügen und wenn ich möchte, könnte ich einen weiteren Haken hinzufügen, um weiter zu gehen jede dieser Gruppen und jede der tatsächlichen Rollen hinein - unsicher, was das bewirken wird - im Moment

Ich möchte es in requestMaps ändern und es in db verschieben, so dass es viel zu ändern gibt und ich entscheide, ob ich zurückwechseln oder Gruppen verwenden sollte, die ich kenne. Ich kann weniger Namen über Controller konfigurieren und sich auf die Gruppennamen verlassen. .

So oder so ist es unter der Haube von allem und gibt Ihnen eine klare Idee ein paar Jahre später, kann aber für andere nützlich sein

Aktualisieren Also habe ich beschlossen mit: ,getAuthorities(user.roles)

Wo Set<Role> getRoles() { Methode innerhalb des obigen Bit des Codes

Der Grund ist ziemlich einfach:

%Vor%

Wie Sie sehen können, habe ich einen neuen Benutzer mit getOldRoles hinzugefügt. Ich sehe nur eine Rolle in den getRoles. Ich bekomme zwei Rollen. Ich habe einen Benutzer mit zwei Rollen hinzugefügt.

Dies wird nun alle Benutzerrollen analysieren und sie zu List<GrantedAuthority> hinzufügen. Die Authentifizierung erfolgt weiterhin über die tatsächlichen ROLE-Namen, die wie zuvor generiert wurden.

Es bedeutet nur, wenn ich eine Gruppe vom Benutzer deaktiviere, sollte das aufhören, diese Erlaubnis für diesen Benutzer zu laden.

das sollte das Modell tun

    
Vahid 10.10.2017 18:00
quelle

Tags und Links