1

私の最初の大規模な Symfony2 プロジェクトに取り組んでいますが、イベント リスナー/サブスクライバーで何が起こっているのかを把握するのに少し苦労しています。

ユーザーがアカウントを登録した後、ロール (BLOG_USER) を FOSUser エンティティに追加するイベント サブスクライバーが必要です。

ここに私がこれまでに持っているものがあります:

登録リスナー:

namespace MyBlog\SiteBundle\EventListener;

use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\FormEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class RegistrationListener implements EventSubscriberInterface {
    public static function getSubscribedEvents() {
        return array(
            FOSUserEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess',
        );
    }
    public function onRegistrationSuccess(FormEvent $event){
        $rolesArr = array('ROLE_USER', 'BLOG_USER');

        $user = $event->getForm()->getData();
        $user->setRoles($rolesArr);
    }
}

services.yml:

services:
    myblog_user.registration_listener:
        class: MyBlog\SiteBundle\EventListener\RegistrationListener
        arguments: []
        tags:
            - { name: kernel.event_subscriber }

security.yml:

access_control:
    - { path: ^/blog/, role: BLOG_USER }

これまでのところ、新しいユーザーを登録すると、/blog ルート (CRUD 画面のセット) にアクセスできません。BLOG_USER ロールのないユーザーに期待される「アクセス拒否」メッセージが表示されます。

編集:

私のコードは、データベース内のユーザーにロールを追加するように見えます。ロールの下の fos_user テーブルで、私のユーザーはこれを持っています:

a:1:{i:0;s:9:"BLOG_USER";}

私の access_control はこれを認識していないようです。

 {% if is_granted('BLOG_USER') %}

is_granted も失敗します-ユーザーが持っている役割を確認できません...

4

1 に答える 1

2

コメントで説明されているように、問題はロール名にありました。役割は で始まる必要がありROLE_ます。したがって、解決策は、ロール階層ライトを設定することです

ROLE_BLOG_USER: ROLE_USER

ドキュメントからの引用

すべてのロールは、Symfony2 によって管理される ROLE_ プレフィックスで始まる必要があります。専用の Role クラス (より高度な) を使用して独自のロールを定義する場合は、ROLE_ プレフィックスを使用しないでください。

于 2013-08-13T05:31:15.903 に答える