2013-10-30 10 views
5

Ich versuche etwas über Symfony und den "Super Admin" zu verstehen.Symfony - Verstehen super admin

Als ich FOSUser to create a user mit Super-Admin-Rechte verwenden

php app/console fos:user:create adminuser --super-admin 

Ich würde zunächst wissen, was bedeutet, (aus dem doc)

[...] Die Angabe der --super- Admin-Option-Flag den Benutzer als Super-Administrator [...]

ich stelle mir es bedeutet ROLE_SUPER_ADMIN dem Benutzer gewähren, weil ich sehe keine Super-admin Feld in der Benutzertabelle.

Zweitens, während (noch aus der doc)

Ein Super-Administrator Zugriff auf jeden Teil Ihrer Anwendung hat

security: 
    role_hierarchy: 
     ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH, ...] 

Warum brauchen wir noch die Zugriffshierarchie zu konfigurieren, es?

Antwort

4

Mit Blick auf FOSUserBundle Code finden Sie, dass die CreateUserCommand wenn mit der Flagge --super-admin aufgerufen wird $superadmin=true die UserManipulator mit einem boolean Argumente nennen.

Nun ruft der UserManipulator die UserManager an, die ein Benutzerobjekt erstellen wird, rufen Sie es setSuperAdmin() Methode auf und beharrt den neuen Benutzer anschließend.

Das Verfahren sieht wie folgt aus:

public function setSuperAdmin($boolean) 
{ 
    if (true === $boolean) { 
     $this->addRole(static::ROLE_SUPER_ADMIN); 
    } else { 
     $this->removeRole(static::ROLE_SUPER_ADMIN); 
    } 

    return $this; 
} 

So Ihre erste Frage zu beantworten:

Ja, die --super-admin Flagge FOSUserBundle verursacht einen neuen Benutzer mit der ROLE_SUPER_ADMIN Rolle zu erstellen.

Sie müssen die Rollenhierarchie immer noch in Ihre Sicherheitskonfiguration einbeziehen, da sich die Rolle ROLE_SUPER_ADMIN grundsätzlich nicht von anderen Rollen unterscheidet.

Es ist nur eine Konventionprovided by the Symfony standard edition die Benutzer mit Rolle ROLE_SUPER_ADMIN sollten keine Zugangsbeschränkungen haben.

Wenn Sie die ROLE_SUPER_ADMIN wollen alle Sicherheits Wähler standardmäßig umgehen - haben einen Blick auf JMSSecurityExtraBundle der IddqdVoter die ROLE_IDDQD dies für die besondere Rolle implementiert. Aber das wurde bereits in Ihrer anderen Frage here vorgeschlagen.

+0

Ok ich sehe, ich dachte es wären nur Wähler und ich habe vergessen Wähler werden immer gerufen. Ich dachte auch, es wäre wie in Django gemacht, in dem Superuser automatisch alle Rechte haben. Ich kann mir keine Situation vorstellen, in der wir etwas vor Superusern verstecken wollen. –

1

Durch die Hierarchie definieren, können Sie es explizit gewähren die ROLE_ADMIN und ROLE_ALLOWED_TO_SWITCH Rollen (oder andere benutzerdefinierte Rollen könnten Sie haben)

Wenn Sie diese Zeile kommentieren, und Sie versuchen, mit Ihrem ROLE_SUPER_ADMIN Benutzer auf eine Aktion für den Zugriff mit Wenn Sie eine ROLE_ADMIN-Prüfung durchführen, erhalten Sie einen nicht zulässigen Fehler.

Der ROLE_SUPER_ADMIN ist nur eine Konvention für den Namen, den die Superadministratorrolle haben sollte, aber er hat keine eigenen Privilegien, Sie müssen sie explizit gewähren.

+0

Haben Sie nur den Konventionsteil meiner Antwort kopiert? :) – nifr

+0

Haha, nein, wir antworteten zur selben Zeit :) Ich denke, es ist nur die offensichtliche Antwort, wenn du verstehst, wie Rollen in Symfony2 funktionieren. Aber ich wies auf die Konvention in ganz Symfony, nicht nur in FOSUserBundle – jmoreno

+0

Vielen Dank für diese einfache Antwort. –

Verwandte Themen