sonata-user-bundle

___ qstntxt ___

Ich verwende SonataAdminBundle in Symfony 3. Da ich Symfony 3 verwende, kann ich SonataUserBundle immer noch nicht verwenden. Also verwende ich SonataAdminBundle nur mit FOSUserBundle.

Nun versuche ich, bestimmte Routen pro Rolle zu verbergen. Zum Beispiel habe ich nur drei Rollen:

  • Super Admin
  • Admin
  • Eine andere Rolle

Super Admin hat alle Rollen, die Admin hat, Admin hat alle die dritte, und die dritte hat offensichtlich ROLE_USER. Super Admin sollte in der Lage sein, neue Benutzer zu erstellen und ihm eine Rolle zuzuweisen. Der Super Admin sollte auch in der Lage sein, die Passwörter eines Benutzers zu ändern. Die Benutzer sollten die Kennwörter ihrer eigenen Konten ändern können. Und schließlich, andere Rollen, die Super Admin sollte nicht in der Lage sein, ihre eigenen Rollen zu ändern und neue Benutzer zu erstellen.

Wie kann ich dies ohne SonataUserBundle erreichen? Für das Entfernen von Routen habe ich etwas wie folgt versucht:

%Vor%

Aber ich denke, es gibt eine bessere Lösung. Ich bin mir der offiziellen Dokumentation über Sicherheit durchaus bewusst, aber ich bin es verwirrt das, bedeutet das, dass ich jede einzelne Rolle für alle verschiedenen Admins in meiner %code% Datei fest codieren muss? Funktioniert das sogar ohne SonataUserBundle? Ich möchte keine zusätzlichen Datenbanktabellen für ACL hinzufügen.

Kann jemand bitte helfen und / oder ein gutes Beispiel geben? Ich werde es wirklich sehr schätzen.

    
___ answer40302296 ___

Dies ist, was ich bisher nur habe, dass Benutzer neue Benutzer nicht erstellen können und Benutzer nicht bearbeiten und löschen können. Das ist einfach lächerlich, jede einzelne Rolle zu spezifizieren, nur um die 2 oder 3 zu entfernen, die ich nicht will:

%Vor%

Hat jemand einen besseren Weg? Bitte?

    
___ answer40264761 ___

So verwalten Sie Benutzer und Rollen in Sonata ohne %code% ?

Antwort: wir müssen dasselbe tun wie %code% . (Aber lassen Sie uns ein wenig vereinfachen)

Eine Analogie zur Sicherheit basierend auf %code% in Symfony flat:

  • Das Haus: Ein Gebäude mit Türen und Schlüsseln (das System).
  • Die Tür: Platz im Haus, wo der Zugang eingeschränkt ist - %code% :

    %Vor%
  • Der Schlüssel: Berechtigung für den Zugriff auf eine eingeschränkte Tür erteilt - %code% :

    %Vor%
  • Der Hauptschlüssel: Ein Schlüssel, der mehrere Türen öffnen kann:

    %Vor%

Nach dieser Analogie hat %code% bereits die Türen zur Beschränkung des Zugriffs auf jede Standardaktion erstellt ( zB %code% Aktion ) über eine verwaltete Entität.

Unsere Aufgabe besteht also darin, die Schlüssel den Benutzern "nur" zuzuweisen (es sei denn, Sie müssen Ihre eigenen Türen erstellen). Es gibt viele Möglichkeiten, dies zu archivieren (es hängt davon ab, was zu tun ist) ).

Hinweis: Wenn Sie keine Rollenhierarchie haben, haben Sie nur einzelne Schlüssel (d. h. Sie haben keine Hauptschlüssel), wodurch die Rollen (Schlüssel) weniger flexibel zugewiesen werden können.

Nun verwendet %code% eine bestimmte Methode, um die Schlüssel in einem Kontext der admin-Klasse zu überprüfen, indem Sie einfach folgendes tun: %code% , weil er seine eigene %code% -Funktion hat (wobei %code% der ist aktionsname), aber wirklich, was es tut, ist den Namen der Rolle (mit dem aktuellen Admin-Code) zu erstellen, bevor Sie es überprüfen, so dass er dies schließlich überprüfen: %code% -dieser Schlüssel ist es, was wir brauchen "geben" an den Benutzer.

Wie bekomme ich die Rollenliste von Sonata admin system?

In einem Controller-Kontext:

%Vor%

Als Nächstes können Sie alles damit machen (z. B. einen benutzerdefinierten Formulartyp zum Verwalten der Benutzerrolleneigenschaft erstellen). Sie könnten sortieren, gruppieren diese Rollen, um dem Benutzer diese Liste auf die einfachste Weise zu zeigen.

Hier oben können wir Rollen zuweisen und arbeiten, ohne auch %code% zu verwenden.

Weitere Details Ссылка

    
___ answer40305228 ___

Sie können einen benutzerdefinierten User-Permission-Voter für Ihre User-Entity definieren, siehe hier .

> %Vor%

Dann erstellen Sie den Service

%Vor%

Seien Sie vorsichtig mit der Strategie Zugriffsentscheidung , I funktioniert möglicherweise nicht abhängig von Ihrer Konfiguration, wenn sie in %code% oder %code%

definiert ist

Sie können auch eine direkte Verknüpfung / Route zur eigenen Bearbeitungsseite des Benutzers hinzufügen, wenn Sie nicht jedem Benutzer Zugriff auf die Benutzerliste gewähren möchten.

BEARBEITEN

Um die Benutzerrollenbearbeitung einzuschränken, können Sie einfach die Funktion %code% bearbeiten:

, damit ein Benutzer seine eigene Rolle nicht bearbeiten kann %Vor%

Offensichtlich prüft die Symfony-Formularkomponente für Sie, dass kein anderes Feld hinzugefügt wird.

    
___ tag123symfony ___ Symfony ist ein Open-Source-PHP-Webentwicklungsframework für PHP 5.5.9+, das sich auf einfache und schnelle Entwicklungszyklen konzentriert und hochmoderne Designmuster und Programmierphilosophien beinhaltet. Symfony sollte nicht mit Symphony CMS verwechselt werden. Dieses Tag sollte nicht für Fragen zu Symfony 1.x verwendet werden. Bitte verwenden Sie stattdessen das Symfony1-Tag. ___ tag123sonataadmin ___ SonataAdminBundle ist ein Symfony-Bundle zur Erstellung robuster benutzerfreundlicher Administrationsschnittstellen. ___ tag123php ___ PHP ist eine weit verbreitete, dynamische, objektorientierte und interpretierte Skriptsprache, die primär für die serverseitige Webentwicklung entwickelt wurde. ___ tag123sonatabenutzerbundle ___ Integriert das 'FOS / UserBundle' im Sonata Admin-Projekt, um einige Funktionen für die Benutzer hinzuzufügen. ___ qstnhdr ___ Entfernen Sie bestimmte Routen pro Benutzerrolle in Sonata ohne SonataUserBundle ___
1
Antwort

Hinzufügen benutzerdefinierter Validierungsregeln zu SonataUserBundle

Ich habe SonataUserBundle gemäß den Dokumenten installiert und alles funktioniert gut. Außer dass ich keine benutzerdefinierten Validierungsregeln hinzufügen kann. Nach meinem Verständnis sollten die neuen Regeln zu einer neuen Validierungsgr...
01.09.2014, 16:02
3
Antworten

Entfernen Sie bestimmte Routen pro Benutzerrolle in Sonata ohne SonataUserBundle

Ich verwende SonataAdminBundle in Symfony 3. Da ich Symfony 3 verwende, kann ich SonataUserBundle immer noch nicht verwenden. Also verwende ich SonataAdminBundle nur mit FOSUserBundle. Nun versuche ich, bestimmte Routen pro Rolle zu verbergen...
25.10.2016, 20:26