プロジェクトではとSonataUserBundle
を使用しています。インストールパッケージは、次のとおりです。security.yml
設定ファイル内のSonata Admin:isGranted()はAdminクラスでは常にtrueを返しますが、テンプレートでは真を返します
$ 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
役割:
role_hierarchy:
ROLE_ADMIN: [ROLE_USER, ROLE_SONATA_ADMIN]
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
のみROLE_ADMIN
を持つユーザでログインして、私のUserAdmin
クラスから以下のダンプ:
dump($this->isGranted('ROLE_ALLOWED_TO_SWITCH'));
dump($this->isGranted('ROLE_BLA_BLA_BLA'));
dump($this->isGranted('ROLE_USER'));
symfonyツールバーで印刷(dev
環境)
{{ dump(is_granted('ROLE_ALLOWED_TO_SWITCH')) }}
{{ dump(is_granted('ROLE_BLA_BLA_BLA')) }}
{{ dump(is_granted('ROLE_USER')) }}
、app/Resources/SonataAdminBundle/views/CRUD/[anytemplate].html.twig
のように上書きソナタテンプレートにダンプを置く場合は、正しい値が返されますが
true
true
true
。
ここでこのラインは、SonataUserBundle
で、効果がなかったので、私はこれに入っ
false
false
true
:https://github.com/sonata-project/SonataUserBundle/blob/3.x/Admin/Model/UserAdmin.php#L95
isGranted()
使用状況はここで説明されています。http://symfony.com/doc/current/bundles/SonataAdminBundle/reference/security.html#usage
私が何か間違ったことか、これはバグでアム?
編集:
@のmickadooさんのコメントのおかげで、私はそれが何を意味し、私はいつもtrue
を返すように言われているデフォルトのハンドラsonata.admin.security.handler.noop
を、持っていたことに気づきました。私はsonata.admin.security.handler.role
でそれを設定し、いくつかの役割(ROLE_SONATA_USER_ADMIN_USER_LIST
とROLE_SONATA_USER_ADMIN_USER_VIEW
)を作成し、今では$this->isGranted('LIST')
または$this->isGranted('VIEW')
に正しい値を返しますが、常に$this->isGranted('ROLE_USER')
または$this->isGranted('ROLE_ALLOWED_TO_SWITCH')
ためfalse
返します。
この役割を確認するにはどうすればよいですか?以下のような
access_decision_strategyをここで述べたように満場一致に設定しましたか? http://symfony.com/doc/current/bundles/SonataAdminBundle/reference/security.html#id1 – mickadoo
ありがとうございました!これはあまり変わっていませんでしたが、デフォルトのハンドラ 'sonata.admin.security.handler.noop'を使用していることに気付きました。私は質問を編集してより多くの情報を提供しました。 –
それがあなたを助けてくれたことを嬉しく思います。私が言ったように、私はソナタで経験はありませんが、ドキュメントページで純粋に役割をチェックする用途はありません。あなたは '$ this-> get( 'security.authorization_checker') - > isGranted( 'ROLE_USER'))'を試しましたか?ユーザーにロールがあるかどうかを確認したい場合は、 'RoleHierarchy'を使ってサービスを作成して、到達可能なロールにチェックしたいロールが含まれているかどうかを確認できますが、これは最もクリーンな方法ではないかもしれません。あなたが 'AccessDecisionManager'有権者のどれがデバッグしてfalseを返すかを調べることができれば、それは役に立ちます。 – mickadoo