Ich verwende und SonataUserBundle
in einem Symfony
Projekt. Die installierten Pakete sind:Sonata Admin: isGranted() gibt immer true in der Admin Klasse zurück, aber boolean in der Vorlage
$ composer show | grep symfony
friendsofsymfony/rest-bundle 1.7.7 This Bundle provides various tools to rapidly develop RESTful API's with Symfony
friendsofsymfony/user-bundle v1.3.6 Symfony FOSUserBundle
symfony/assetic-bundle v2.8.0 Integrates Assetic into Symfony2
symfony/css-selector v2.8.6 Symfony CssSelector Component
symfony/dom-crawler v2.8.6 Symfony DomCrawler Component
symfony/monolog-bundle 2.11.1 Symfony MonologBundle
symfony/polyfill-apcu v1.1.1 Symfony polyfill backporting apcu_* functions to lower PHP versions
symfony/polyfill-mbstring v1.1.1 Symfony polyfill for the Mbstring extension
symfony/swiftmailer-bundle v2.3.11 Symfony SwiftmailerBundle
symfony/symfony v2.7.13 The Symfony PHP framework
$ composer show | grep sonata
sonata-project/admin-bundle 2.3.10 Symfony SonataAdminBundle
sonata-project/block-bundle 2.2.15 Symfony SonataBlockBundle
sonata-project/cache 1.0.7 Cache library
sonata-project/core-bundle 2.3.11 Symfony SonataCoreBundle
sonata-project/doctrine-extensions 1.0.2 Doctrine2 behavioral extensions
sonata-project/doctrine-orm-admin-bundle 2.3.4 Symfony Sonata/Integrate Doctrine ORM into the SonataAdminBundle
sonata-project/easy-extends-bundle 2.1.10 Symfony SonataEasyExtendsBundle
sonata-project/exporter 1.4.1 Lightweight Exporter library
sonata-project/google-authenticator 1.0.2 Library to integrate Google Authenticator into a PHP project
sonata-project/user-bundle 2.2.5 Symfony SonataUserBundle
Die Rollen in der security.yml
Konfigurationsdatei:
role_hierarchy:
ROLE_ADMIN: [ROLE_USER, ROLE_SONATA_ADMIN]
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
Angemeldete mit einem Benutzer, der ROLE_ADMIN
nur hat die folgenden Deponien aus meiner UserAdmin
Klasse:
dump($this->isGranted('ROLE_ALLOWED_TO_SWITCH'));
dump($this->isGranted('ROLE_BLA_BLA_BLA'));
dump($this->isGranted('ROLE_USER'));
Drucken in Symfony Symbolleiste (dev
Umgebung)
true
true
true
Während, wenn ich die Deponien in einer außer Kraft gesetzt Sonata Vorlage wie app/Resources/SonataAdminBundle/views/CRUD/[anytemplate].html.twig
setzen,
{{ dump(is_granted('ROLE_ALLOWED_TO_SWITCH')) }}
{{ dump(is_granted('ROLE_BLA_BLA_BLA')) }}
{{ dump(is_granted('ROLE_USER')) }}
die richtigen Werte zurückgegeben werden.
false
false
true
ich in diese bekam, weil diese Linie hier, in SonataUserBundle
, keine Wirkung hatte: https://github.com/sonata-project/SonataUserBundle/blob/3.x/Admin/Model/UserAdmin.php#L95
Die isGranted()
Nutzung hier beschrieben wird: http://symfony.com/doc/current/bundles/SonataAdminBundle/reference/security.html#usage
Bin ich etwas falsch zu machen oder ist das ein Bug ?
Edit:
Dank @ mickadoo Kommentar bemerkte ich, dass ich den Standard-Handler sonata.admin.security.handler.noop
hatte, die immer gesagt wird, true
zurückkehren, was immer das bedeutet. Ich stelle es mit sonata.admin.security.handler.role
und erstellt einige Rollen (ROLE_SONATA_USER_ADMIN_USER_LIST
und ROLE_SONATA_USER_ADMIN_USER_VIEW
) und jetzt gibt es den richtigen Wert für $this->isGranted('LIST')
oder $this->isGranted('VIEW')
, aber immer wieder false
für $this->isGranted('ROLE_USER')
oder $this->isGranted('ROLE_ALLOWED_TO_SWITCH')
.
Wie kann ich diese Rollen überprüfen?
Haben Sie Ihre access_decision_strategy einstimmig wie hier erwähnt eingestellt? http://symfony.com/doc/current/bundles/SonataAdminBundle/reference/security.html#id1 – mickadoo
Vielen Dank! Es hat sich nicht viel verändert, aber half mir zu bemerken, dass ich den Standardhandler 'sonata.admin.security.handler.noop' benutzte. Ich habe die Frage bearbeitet, um mehr Informationen zur Verfügung zu stellen. –
Schön zu hören, dass es dir geholfen hat. Wie ich schon sagte, habe ich keine Erfahrung mit Sonaten, aber ich sehe keine Verwendung von reinen Rollen auf der Dokumentseite. Hast du es versucht? $ This -> get ('security.authorization_checker') -> isGranted ('ROLE_USER')) '? Wenn Sie nur überprüfen möchten, ob ein Benutzer eine Rolle hat, können Sie jederzeit einen Service mit der 'RoleHierarchy' erstellen, um zu prüfen, ob die erreichbaren Rollen die Rolle enthalten, die Sie überprüfen möchten, aber vielleicht ist dies nicht der sauberste Weg. Wenn Sie debuggen und überprüfen könnten, welcher der 'AccessDecisionManager'-Wähler falsch zurückgibt, könnte es helfen. – mickadoo